diff options
| author | 2026-01-21 13:23:03 +0000 | |
|---|---|---|
| committer | 2026-01-21 13:23:03 +0000 | |
| commit | 8254559aefad444532fefdf8b8f9b3117132c442 (patch) | |
| tree | 0db98b46b6a2a91f0563a277d23477b82bbbe151 /packages/docs/content | |
| parent | 6db4a3b1807d0d305538a6b83ba9cad047f542d0 (diff) | |
| download | DropOut-8254559aefad444532fefdf8b8f9b3117132c442.tar.gz DropOut-8254559aefad444532fefdf8b8f9b3117132c442.zip | |
docs: add Chinese translations for documentation
- Add development.mdx (开发指南)
- Add troubleshooting.mdx (故障排除)
- Add features/index.mdx (功能概览)
- Add features/authentication.mdx (身份验证)
- Add features/java.mdx (Java 管理)
- Add features/mod-loaders.mdx (模组加载器)
All translations maintain technical terms in English while translating content to simplified Chinese
Co-authored-by: HsiangNianian <44714368+HsiangNianian@users.noreply.github.com>
Diffstat (limited to 'packages/docs/content')
22 files changed, 2885 insertions, 0 deletions
diff --git a/packages/docs/content/docs/architecture.mdx b/packages/docs/content/docs/en/architecture.mdx index f8cc8f4..f8cc8f4 100644 --- a/packages/docs/content/docs/architecture.mdx +++ b/packages/docs/content/docs/en/architecture.mdx diff --git a/packages/docs/content/docs/development.mdx b/packages/docs/content/docs/en/development.mdx index f7beabb..f7beabb 100644 --- a/packages/docs/content/docs/development.mdx +++ b/packages/docs/content/docs/en/development.mdx diff --git a/packages/docs/content/docs/features/authentication.mdx b/packages/docs/content/docs/en/features/authentication.mdx index 67e3c19..67e3c19 100644 --- a/packages/docs/content/docs/features/authentication.mdx +++ b/packages/docs/content/docs/en/features/authentication.mdx diff --git a/packages/docs/content/docs/features/index.mdx b/packages/docs/content/docs/en/features/index.mdx index b36bb61..b36bb61 100644 --- a/packages/docs/content/docs/features/index.mdx +++ b/packages/docs/content/docs/en/features/index.mdx diff --git a/packages/docs/content/docs/features/java.mdx b/packages/docs/content/docs/en/features/java.mdx index 1afdab7..1afdab7 100644 --- a/packages/docs/content/docs/features/java.mdx +++ b/packages/docs/content/docs/en/features/java.mdx diff --git a/packages/docs/content/docs/features/meta.json b/packages/docs/content/docs/en/features/meta.json index 4725321..4725321 100644 --- a/packages/docs/content/docs/features/meta.json +++ b/packages/docs/content/docs/en/features/meta.json diff --git a/packages/docs/content/docs/features/mod-loaders.mdx b/packages/docs/content/docs/en/features/mod-loaders.mdx index a9616d6..a9616d6 100644 --- a/packages/docs/content/docs/features/mod-loaders.mdx +++ b/packages/docs/content/docs/en/features/mod-loaders.mdx diff --git a/packages/docs/content/docs/getting-started.mdx b/packages/docs/content/docs/en/getting-started.mdx index ac0fc1c..ac0fc1c 100644 --- a/packages/docs/content/docs/getting-started.mdx +++ b/packages/docs/content/docs/en/getting-started.mdx diff --git a/packages/docs/content/docs/index.mdx b/packages/docs/content/docs/en/index.mdx index 97e6228..97e6228 100644 --- a/packages/docs/content/docs/index.mdx +++ b/packages/docs/content/docs/en/index.mdx diff --git a/packages/docs/content/docs/meta.json b/packages/docs/content/docs/en/meta.json index 8ad7ea2..8ad7ea2 100644 --- a/packages/docs/content/docs/meta.json +++ b/packages/docs/content/docs/en/meta.json diff --git a/packages/docs/content/docs/troubleshooting.mdx b/packages/docs/content/docs/en/troubleshooting.mdx index 33464d2..33464d2 100644 --- a/packages/docs/content/docs/troubleshooting.mdx +++ b/packages/docs/content/docs/en/troubleshooting.mdx diff --git a/packages/docs/content/docs/zh/architecture.mdx b/packages/docs/content/docs/zh/architecture.mdx new file mode 100644 index 0000000..44066ad --- /dev/null +++ b/packages/docs/content/docs/zh/architecture.mdx @@ -0,0 +1,282 @@ +--- +title: 架构设计 +description: DropOut Minecraft 启动器的技术架构和设计 +--- + +# 架构设计 + +DropOut 采用现代技术栈构建,旨在实现高性能、安全性和跨平台兼容性。 + +## 技术栈 + +### 后端(Rust) +- **框架**: Tauri v2 +- **语言**: Rust(Edition 2021) +- **异步运行时**: Tokio +- **HTTP 客户端**: reqwest with native-tls + +### 前端(Svelte) +- **框架**: Svelte 5(with runes) +- **样式**: Tailwind CSS 4 +- **构建工具**: Vite with Rolldown +- **包管理器**: pnpm + +### 文档 +- **框架**: Fumadocs with React Router v7 +- **内容**: MDX 文件 +- **样式**: Tailwind CSS 4 + +## 系统架构 + +``` +┌─────────────────────────────────────────────────────────┐ +│ 前端(Svelte 5) │ +│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌─────────┐ │ +│ │ Stores │ │Components│ │ UI Views │ │Particles│ │ +│ └────┬─────┘ └────┬─────┘ └────┬─────┘ └────┬────┘ │ +│ │ │ │ │ │ +│ └─────────────┴─────────────┴──────────────┘ │ +│ │ │ +│ Tauri 命令 │ +│ 事件/发射器 │ +└──────────────────────────┬──────────────────────────────┘ + │ +┌──────────────────────────┴──────────────────────────────┐ +│ 后端(Rust/Tauri) │ +│ ┌─────────────────────────────────────────────────┐ │ +│ │ main.rs(命令) │ │ +│ └──────────────┬──────────────────────────────────┘ │ +│ │ │ +│ ┌──────────────┴───────────────────────────────┐ │ +│ │ 核心模块 │ │ +│ │ ┌──────┐ ┌────────┐ ┌──────┐ ┌──────────┐ │ │ +│ │ │ Auth │ │Download│ │ Java │ │ Instance │ │ │ +│ │ └──────┘ └────────┘ └──────┘ └──────────┘ │ │ +│ │ ┌──────┐ ┌────────┐ ┌──────┐ ┌──────────┐ │ │ +│ │ │Fabric│ │ Forge │ │Config│ │Manifest │ │ │ +│ │ └──────┘ └────────┘ └──────┘ └──────────┘ │ │ +│ └──────────────────────────────────────────────┘ │ +│ │ +│ ┌─────────────────────────────────────────────────┐ │ +│ │ 工具和辅助函数 │ │ +│ │ • ZIP 提取 • 路径工具 │ │ +│ └─────────────────────────────────────────────────┘ │ +└──────────────────────────┬──────────────────────────────┘ + │ + 外部 API + │ + ┌──────────────────┼──────────────────┐ + │ │ │ + ┌─────┴────┐ ┌──────┴─────┐ ┌──────┴─────┐ + │ Mojang │ │ Fabric │ │ Forge │ + │ APIs │ │ Meta │ │ Maven │ + └──────────┘ └────────────┘ └────────────┘ +``` + +## 核心组件 + +### 前端状态管理 + +DropOut 使用 **Svelte 5 runes** 进行响应式状态管理: + +```typescript +// stores/auth.svelte.ts +export class AuthState { + currentAccount = $state<Account | null>(null); // 响应式 + isLoginModalOpen = $state(false); + + $effect(() => { // 副作用 + // 依赖变化时自动运行 + }); +} +``` + +**关键 Stores:** +- `auth.svelte.ts`: 认证状态和登录流程 +- `settings.svelte.ts`: 启动器设置和 Java 检测 +- `game.svelte.ts`: 游戏运行状态和日志 +- `instances.svelte.ts`: 实例管理 +- `ui.svelte.ts`: UI 状态(提示、模态框、活动视图) + +### 后端架构 + +#### 命令模式 +所有 Tauri 命令遵循此结构: + +```rust +#[tauri::command] +async fn command_name( + window: Window, + state: State<'_, SomeState>, + param: Type, +) -> Result<ReturnType, String> { + emit_log!(window, "状态消息"); + // 异步逻辑 + Ok(result) +} +``` + +#### 事件通信 + +**Rust → 前端(进度更新):** +```rust +window.emit("launcher-log", "正在下载...")?; +window.emit("download-progress", progress_struct)?; +``` + +**前端 → Rust(命令):** +```typescript +import { invoke } from "@tauri-apps/api/core"; +const result = await invoke("start_game", { versionId: "1.20.4" }); +``` + +### 核心模块 + +#### 认证(`core/auth.rs`) +- **微软 OAuth 2.0**: 设备代码流 +- **离线认证**: 本地 UUID 生成 +- **令牌管理**: 刷新令牌存储和自动刷新 +- **Xbox Live 集成**: 完整认证链 + +**认证流程:** +1. 设备代码请求 → MS 令牌 +2. Xbox Live 认证 +3. XSTS 授权 +4. Minecraft 令牌交换 +5. 配置文件获取 + +#### 下载器(`core/downloader.rs`) +- **并发下载**: 可配置线程池 +- **断点续传**: `.part` 和 `.part.meta` 文件 +- **多段下载**: 大文件分割成块 +- **校验和验证**: SHA1/SHA256 验证 +- **进度跟踪**: 实时事件到前端 + +#### Java 管理(`core/java.rs`) +- **自动检测**: 扫描系统路径 +- **Adoptium 集成**: 按需下载 JDK/JRE +- **目录缓存**: 版本列表 24 小时缓存 +- **安装**: 提取到应用数据目录 +- **取消**: 下载取消的原子标志 + +#### Fabric 支持(`core/fabric.rs`) +- **Meta API 集成**: 获取加载器版本 +- **配置文件生成**: 创建版本 JSON +- **库解析**: Maven 构件处理 + +#### Forge 支持(`core/forge.rs`) +- **安装程序执行**: 运行 Forge 安装程序 +- **配置文件解析**: 提取安装配置文件 +- **库管理**: 处理 Forge 特定库 + +#### 实例系统(`core/instance.rs`) +- **隔离**: 每个实例独立目录 +- **配置**: 每个实例的设置 +- **模组管理**: 实例特定模组 +- **版本锁定**: 可复现环境 + +#### 版本管理 +- **清单解析**(`manifest.rs`): Mojang 版本清单 +- **继承系统**(`version_merge.rs`): 父版本合并 +- **游戏版本**(`game_version.rs`): JSON 解析和验证 +- **规则引擎**(`rules.rs`): 操作系统/功能条件逻辑 + +### 文件结构 + +``` +~/.local/share/com.dropout.launcher/ (Linux) +~/Library/Application Support/com.dropout.launcher/ (macOS) +%APPDATA%/com.dropout.launcher/ (Windows) +├── versions/ +│ └── <version_id>/ +│ ├── <version_id>.json +│ ├── <version_id>.jar +│ └── natives/ +├── libraries/ +│ └── <maven-path>/ +├── assets/ +│ ├── indexes/ +│ └── objects/ +├── instances/ +│ └── <instance_name>/ +│ ├── mods/ +│ ├── config/ +│ └── saves/ +├── java/ +│ └── <version>/ +├── config.json +└── accounts.json +``` + +## 数据流 + +### 游戏启动序列 + +1. **前端**: 用户点击"启动游戏" +2. **命令**: 调用 `start_game(version_id)` +3. **后端处理**: + - 加载版本 JSON(带继承) + - 解析所有库 + - 下载缺少的资源 + - 提取原生库 + - 构建类路径 + - 构造 JVM 参数 + - 替换占位符 +4. **进程生成**: 使用参数启动 Java +5. **流日志**: 向前端发送 stdout/stderr +6. **监视**: 跟踪游戏进程状态 + +### 下载流程 + +1. **队列创建**: 要下载的文件列表 +2. **并发处理**: 信号量限制线程 +3. **恢复检查**: 验证现有 `.part` 文件 +4. **下载**: 大文件多段 +5. **验证**: 校验和验证 +6. **进度事件**: 实时更新到 UI +7. **完成**: 从 `.part` 移动到最终位置 + +### 认证流程 + +1. **设备代码请求**: 获取用户代码 + 设备代码 +2. **用户授权**: 用户访问 URL 并输入代码 +3. **令牌轮询**: 前端轮询完成 +4. **令牌交换**: MS 令牌 → Xbox → XSTS → Minecraft +5. **配置文件获取**: 获取用户名和 UUID +6. **存储**: 使用刷新令牌保存账户 +7. **自动刷新**: 过期时后台令牌刷新 + +## 平台特定考虑 + +### Linux +- 使用 GTK WebView(`webkit2gtk`) +- 从 `/usr/lib/jvm` 系统 Java 检测 +- 桌面文件集成 + +### macOS +- 使用系统 WebKit +- 应用程序包结构 +- 钥匙串集成用于安全存储 + +### Windows +- 使用 WebView2 运行时 +- 注册表 Java 检测 +- MSI 安装程序支持 +- 发布版本中无控制台窗口 + +## 性能优化 + +- **并发下载**: 并行资源/库下载 +- **延迟加载**: 按需加载版本清单 +- **缓存**: Java 目录、版本清单 +- **原生代码**: 用于 CPU 密集型操作的 Rust +- **异步 I/O**: 用于非阻塞操作的 Tokio + +## 安全功能 + +- **令牌加密**: 安全存储认证令牌 +- **仅 HTTPS**: 所有外部 API 调用 +- **校验和验证**: 文件完整性验证 +- **沙箱执行**: Tauri 安全模型 +- **无任意代码**: 无 eval 或动态代码执行 + diff --git a/packages/docs/content/docs/zh/development.mdx b/packages/docs/content/docs/zh/development.mdx new file mode 100644 index 0000000..6ba5b1d --- /dev/null +++ b/packages/docs/content/docs/zh/development.mdx @@ -0,0 +1,546 @@ +--- +title: 开发指南 +description: 从源代码构建、测试和贡献 DropOut +--- + +# 开发指南 + +本指南将帮助你设置开发环境、从源代码构建 DropOut,以及为项目做出贡献。 + +## 前置要求 + +### 必需软件 + +1. **Rust** (最新稳定版) + ```bash + # 通过 rustup 安装 + curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh + ``` + +2. **Node.js** (v22+) 和 **pnpm** (v9+) + ```bash + # 从 https://nodejs.org/ 安装 Node.js + # 安装 pnpm + npm install -g pnpm@9 + ``` + +3. **系统依赖** + + 按照你的平台参考 [Tauri 前置要求](https://v2.tauri.app/start/prerequisites/): + + **Linux (Debian/Ubuntu):** + ```bash + sudo apt update + sudo apt install libwebkit2gtk-4.1-dev \ + build-essential \ + curl \ + wget \ + file \ + libssl-dev \ + libayatana-appindicator3-dev \ + librsvg2-dev + ``` + + **macOS:** + ```bash + xcode-select --install + ``` + + **Windows:** + - 安装 [Microsoft Visual C++ Build Tools](https://visualstudio.microsoft.com/visual-cpp-build-tools/) + - 安装 [WebView2](https://developer.microsoft.com/microsoft-edge/webview2/) + +## 快速开始 + +### 克隆仓库 + +```bash +git clone https://github.com/HydroRoll-Team/DropOut.git +cd DropOut +``` + +### 安装依赖 + +**前端依赖:** +```bash +cd packages/ui +pnpm install +cd ../.. +``` + +**文档依赖:** +```bash +cd packages/docs +pnpm install +cd ../.. +``` + +### 开发模式 + +以开发模式运行 DropOut,支持热重载: + +```bash +cargo tauri dev +``` + +这将: +1. 启动前端开发服务器(Vite 在 5173 端口) +2. 编译 Rust 后端 +3. 打开 Tauri 窗口 +4. 为前端更改启用热重载 +5. 在 Rust 文件更改时重新编译 + +**终端输出:** +- 来自 Vite 的前端日志 +- Rust 标准输出/标准错误 +- 编译状态 + +### 构建生产版本 + +构建发布二进制文件: + +```bash +cargo tauri build +``` + +**输出位置:** +- **Linux**: `src-tauri/target/release/bundle/` + - `.deb` 软件包 + - `.AppImage` 包 +- **macOS**: `src-tauri/target/release/bundle/` + - `.dmg` 安装器 + - `.app` 包 +- **Windows**: `src-tauri/target/release/bundle/` + - `.msi` 安装器 + - `.exe` 可执行文件 + +## 项目结构 + +``` +DropOut/ +├── src-tauri/ # Rust 后端 +│ ├── src/ +│ │ ├── main.rs # Tauri 命令和入口点 +│ │ ├── core/ # 核心模块 +│ │ │ ├── auth.rs # 身份验证 +│ │ │ ├── downloader.rs # 下载管理器 +│ │ │ ├── fabric.rs # Fabric 支持 +│ │ │ ├── forge.rs # Forge 支持 +│ │ │ ├── java.rs # Java 管理 +│ │ │ ├── instance.rs # 实例系统 +│ │ │ └── ... +│ │ └── utils/ # 工具类 +│ └── Cargo.toml +├── packages/ +│ ├── ui/ # Svelte 5 前端 +│ │ ├── src/ +│ │ │ ├── App.svelte +│ │ │ ├── components/ +│ │ │ ├── stores/ # 状态管理 +│ │ │ └── lib/ +│ │ └── package.json +│ └── docs/ # 文档站点 +│ ├── content/docs/ +│ └── package.json +├── .github/ +│ └── workflows/ # CI/CD 流水线 +└── scripts/ # 构建脚本 +``` + +## 开发工作流 + +### 前端开发 + +**启动开发服务器:** +```bash +cd packages/ui +pnpm dev +``` + +**类型检查:** +```bash +pnpm check +``` + +**代码检查:** +```bash +pnpm lint +``` + +**格式化代码:** +```bash +pnpm format +``` + +### 后端开发 + +**运行 Rust 测试:** +```bash +cargo test +``` + +**检查代码:** +```bash +cargo check +``` + +**格式化代码:** +```bash +cargo fmt +``` + +**代码检查:** +```bash +cargo clippy +``` + +### 文档开发 + +**启动文档开发服务器:** +```bash +cd packages/docs +pnpm dev +``` + +**构建文档:** +```bash +pnpm build +``` + +**类型检查:** +```bash +pnpm types:check +``` + +## 代码风格 + +### Rust + +遵循标准 Rust 约定: +- 使用 `cargo fmt` 格式化 +- 使用 `cargo clippy` 检查 +- 编写文档注释 (`///`) +- 正确处理错误 +- 对 I/O 使用 async/await + +**示例:** +```rust +/// Starts the Microsoft authentication device flow +#[tauri::command] +async fn start_microsoft_login( + window: Window, +) -> Result<DeviceCodeResponse, String> { + emit_log!(window, "Starting Microsoft login..."); + + start_device_flow() + .await + .map_err(|e| e.to_string()) +} +``` + +### TypeScript/Svelte + +遵循项目约定: +- 使用 Svelte 5 runes (`$state`, `$effect`) +- 优先使用 TypeScript 而非 JavaScript +- 使用 Biome 进行格式化和检查 +- 遵循组件结构 + +**示例:** +```typescript +// stores/auth.svelte.ts +export class AuthState { + currentAccount = $state<Account | null>(null); + isLoginModalOpen = $state(false); + + async login(username: string) { + const account = await invoke('offline_login', { username }); + this.currentAccount = account; + } +} +``` + +## 测试 + +### 单元测试 + +**Rust:** +```rust +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn test_generate_offline_uuid() { + let uuid = generate_offline_uuid("Player"); + assert!(uuid.len() > 0); + } +} +``` + +**运行:** +```bash +cargo test +``` + +### 集成测试 + +测试完整应用程序: +1. 以开发模式构建:`cargo tauri dev` +2. 手动测试功能 +3. 检查控制台错误 +4. 验证 UI 行为 + +### CI 测试 + +GitHub Actions 在以下平台运行测试: +- Ubuntu(最新版) +- Arch Linux(Wayland) +- Windows(最新版) +- macOS(ARM64) + +查看工作流:`.github/workflows/test.yml` + +## 调试 + +### 前端调试 + +1. 在 Tauri 窗口中打开开发工具:`Ctrl+Shift+I`(Windows/Linux)或 `Cmd+Option+I`(macOS) +2. 检查控制台错误 +3. 使用 React DevTools 或 Svelte DevTools +4. 监控网络标签页查看 API 调用 + +### 后端调试 + +**打印调试:** +```rust +emit_log!(window, format!("Debug: {}", value)); +println!("Debug: {}", value); +``` + +**Rust 调试器:** +```bash +# 安装 rust-lldb 或 rust-gdb +cargo install rust-gdb + +# 调试 +rust-gdb target/debug/dropout +``` + +### 日志 + +**前端:** +```typescript +console.log("Info message"); +console.error("Error message"); +``` + +**后端:** +```rust +emit_log!(window, "Status update"); +eprintln!("Error: {}", error); +``` + +## 贡献 + +### 贡献工作流 + +1. **Fork** 仓库 +2. **创建**功能分支: + ```bash + git checkout -b feature/my-feature + ``` +3. **进行**更改 +4. **彻底测试** +5. **提交**时使用约定式提交: + ```bash + git commit -m "feat: add new feature" + ``` +6. **推送**到你的 fork: + ```bash + git push origin feature/my-feature + ``` +7. **创建** Pull Request + +### 提交消息 + +遵循 [约定式提交](https://www.conventionalcommits.org/): + +**格式:** +``` +<type>[scope]: <description> + +[optional body] + +[optional footer] +``` + +**类型:** +- `feat`: 新功能 +- `fix`: 错误修复 +- `docs`: 文档 +- `style`: 格式化 +- `refactor`: 代码重构 +- `perf`: 性能改进 +- `test`: 添加测试 +- `chore`: 维护 + +**示例:** +```bash +feat(auth): add offline authentication support +fix(java): resolve detection on Windows +docs: update installation guide +refactor(download): simplify progress tracking +``` + +### Pull Request 指南 + +**提交前:** +- [ ] 代码遵循风格指南 +- [ ] 测试在本地通过 +- [ ] 必要时更新文档 +- [ ] 没有提交不必要的文件 +- [ ] 提交消息清晰 + +**PR 描述:** +- 解释做了什么以及为什么 +- 链接相关 issue +- 列出破坏性更改 +- 为 UI 更改添加截图 + +### 代码审查 + +维护者将审查你的 PR: +- 代码质量和风格 +- 测试覆盖率 +- 文档 +- 性能影响 +- 安全影响 + +对反馈保持响应并进行要求的更改。 + +## 常见任务 + +### 添加 Tauri 命令 + +1. **在 `main.rs` 中定义命令:** + ```rust + #[tauri::command] + async fn my_command(param: String) -> Result<String, String> { + Ok(format!("Received: {}", param)) + } + ``` + +2. **在构建器中注册:** + ```rust + .invoke_handler(tauri::generate_handler![ + my_command, + // ... 其他命令 + ]) + ``` + +3. **从前端调用:** + ```typescript + const result = await invoke('my_command', { param: 'value' }); + ``` + +### 添加 UI 组件 + +1. **创建组件文件:** + ```svelte + <!-- packages/ui/src/components/MyComponent.svelte --> + <script lang="ts"> + let count = $state(0); + </script> + + <button onclick={() => count++}> + Count: {count} + </button> + ``` + +2. **导入并使用:** + ```svelte + <script> + import MyComponent from './components/MyComponent.svelte'; + </script> + + <MyComponent /> + ``` + +### 添加 Store + +1. **创建 store 文件:** + ```typescript + // packages/ui/src/stores/mystore.svelte.ts + export class MyState { + value = $state(0); + + increment() { + this.value++; + } + } + + export const myState = new MyState(); + ``` + +2. **在组件中使用:** + ```svelte + <script> + import { myState } from '../stores/mystore.svelte'; + </script> + + <button onclick={() => myState.increment()}> + {myState.value} + </button> + ``` + +## 开发问题故障排除 + +### 构建失败 + +**"cannot find -lwebkit2gtk"** +```bash +# 安装 WebKit 依赖 +sudo apt install libwebkit2gtk-4.1-dev +``` + +**"pnpm not found"** +```bash +# 安装 pnpm +npm install -g pnpm@9 +``` + +**"Rust version too old"** +```bash +# 更新 Rust +rustup update +``` + +### 运行时问题 + +**"Failed to load dynamic library"** +- 重新构建:`cargo clean && cargo tauri dev` +- 检查库路径 +- 验证已安装依赖 + +**"CORS error"** +- 开发模式下正常 +- Tauri 自动处理 CORS + +**"Hot reload not working"** +- 检查 Vite 配置 +- 重启开发服务器 +- 清除浏览器缓存 + +## 资源 + +- [Tauri 文档](https://v2.tauri.app/) +- [Svelte 5 文档](https://svelte.dev/docs) +- [Rust 程序设计语言](https://doc.rust-lang.org/book/) +- [DropOut 仓库](https://github.com/HydroRoll-Team/DropOut) + +## 获取帮助 + +- **Issues**: [GitHub Issues](https://github.com/HydroRoll-Team/DropOut/issues) +- **讨论**: [GitHub Discussions](https://github.com/HydroRoll-Team/DropOut/discussions) +- **文档**: 本站点 diff --git a/packages/docs/content/docs/zh/features/authentication.mdx b/packages/docs/content/docs/zh/features/authentication.mdx new file mode 100644 index 0000000..d6bfb56 --- /dev/null +++ b/packages/docs/content/docs/zh/features/authentication.mdx @@ -0,0 +1,267 @@ +--- +title: 身份验证 +description: DropOut 中的 Microsoft OAuth 和离线身份验证 +--- + +# 身份验证 + +DropOut 支持两种身份验证方法:Microsoft 账户(用于官方 Minecraft)和离线模式(用于测试和离线游玩)。 + +## Microsoft 身份验证 + +### 概述 + +DropOut 使用 **Device Code Flow** 进行 Microsoft 身份验证,具有以下特点: +- 无需重定向 URL(无需浏览器集成) +- 适用于任何拥有浏览器的设备 +- 提供简单的基于代码的身份验证 +- 完全符合 Microsoft OAuth 2.0 标准 + +### 身份验证流程 + +身份验证链包含多个步骤: + +1. **Device Code** → 用户授权 +2. **MS Token** → 访问令牌 + 刷新令牌 +3. **Xbox Live** → Xbox 令牌 + UHS +4. **XSTS** → 安全令牌 +5. **Minecraft** → 游戏访问令牌 +6. **Profile** → 用户名 + UUID + +#### 第 1 步:设备代码请求 +1. 单击"使用 Microsoft 登录" +2. DropOut 从 Microsoft 请求设备代码 +3. 您会收到: + - 用户代码(例如 `A1B2-C3D4`) + - 验证 URL(通常为 `https://microsoft.com/link`) + - 设备代码(内部使用) + +#### 第 2 步:用户授权 +1. 在任何浏览器中访问验证 URL +2. 输入用户代码 +3. 使用 Microsoft 账户登录 +4. 授权 DropOut 访问您的 Minecraft 个人资料 + +#### 第 3 步:令牌交换 +- DropOut 轮询 Microsoft 检查授权完成 +- 授权后接收访问令牌和刷新令牌 +- 刷新令牌被存储以备将来登录使用 + +#### 第 4 步:Xbox Live 身份验证 +- Microsoft 令牌被交换为 Xbox Live 令牌 +- 检索用户哈希 (UHS) 用于下一步 + +#### 第 5 步:XSTS 授权 +- Xbox Live 令牌被用来获取 XSTS 令牌 +- 此令牌特定于 Minecraft 服务 + +#### 第 6 步:Minecraft 登录 +- XSTS 令牌被交换为 Minecraft 访问令牌 +- 使用端点:`/launcher/login` + +#### 第 7 步:个人资料获取 +- 检索您的 Minecraft 用户名 +- 获取您的 UUID +- 检查您是否拥有 Minecraft + +### 令牌管理 + +**访问令牌:** +- 短期有效(通常为 1 小时) +- 用于游戏身份验证 +- 过期时自动刷新 + +**刷新令牌:** +- 长期有效(通常为 90 天) +- 安全存储在 `accounts.json` 中 +- 用于获取新的访问令牌 + +**自动刷新:** +```rust +// Automatic refresh when token expires +if account.expires_at < current_time { + refresh_full_auth(&account).await?; +} +``` + +### 安全考虑 + +- 令牌存储在平台特定的应用数据目录中 +- 所有 API 调用仅使用 HTTPS +- 不存储凭据(仅存储令牌) +- 需要 User-Agent 标头(绕过 MS WAF) + +### Microsoft 登录故障排除 + +**"Device code expired"(设备代码已过期)** +- 代码在 15 分钟后过期 +- 重新开始登录流程 + +**"Authorization pending"(授权待处理)** +- 在等待阶段很正常 +- 在浏览器中完成授权 + +**"Invalid token"(无效令牌)** +- 令牌可能已过期 +- 登出后重新登录 + +**"You don't own Minecraft"(您不拥有 Minecraft)** +- 验证您的 Microsoft 账户拥有 Minecraft Java Edition +- 在 https://www.minecraft.net/profile 检查 + +## 离线身份验证 + +### 概述 + +离线模式创建一个不需要互联网连接或 Microsoft 账户的本地账户。这对以下情况很有用: +- 测试和开发 +- 无网络游玩 +- LAN 多人游戏 +- Mod 开发 + +### 创建离线账户 + +1. 在登录屏幕单击"离线模式" +2. 输入用户名(3-16 个字符) +3. 单击"创建账户" + +### 工作原理 + +**UUID 生成:** +```rust +// Deterministic UUID v3 from username +let uuid = generate_offline_uuid(&username); +``` + +- 使用 UUID v3(基于命名空间) +- 确定性:相同的用户名 = 相同的 UUID +- 无需网络请求 + +**身份验证:** +- 返回 `"null"` 作为访问令牌 +- Minecraft 在离线模式下接受空令牌 +- 用户名和 UUID 本地存储 + +### 限制 + +- 无法加入在线服务器 +- 不支持皮肤 +- 不支持披风 +- 无法使用 Microsoft 账户功能 + +### 用例 + +**开发:** +```bash +# Testing mod development +cargo tauri dev +# Use offline mode to test quickly +``` + +**LAN 游玩:** +- 无需身份验证即可加入 LAN 世界 +- 托管 LAN 世界 + +**离线游玩:** +- 单人游戏无需网络 +- 无需身份验证 + +## 账户管理 + +### 切换账户 + +目前 DropOut 一次只支持一个活跃账户。多账户支持正在规划中。 + +**切换账户的步骤:** +1. 登出当前账户 +2. 使用新账户登录 + +### 账户存储 + +账户存储在 `accounts.json` 中: + +```json +{ + "current_account_id": "uuid-here", + "accounts": [ + { + "id": "uuid", + "type": "Microsoft", + "username": "PlayerName", + "access_token": "...", + "refresh_token": "...", + "expires_at": 1234567890 + } + ] +} +``` + +### 删除账户 + +删除账户的步骤: +1. 打开设置 +2. 导航到账户 +3. 单击"登出" +4. 或手动删除 `accounts.json` + +## API 参考 + +### Tauri 命令 + +**启动 Microsoft 登录:** +```typescript +const { user_code, verification_uri } = await invoke('start_microsoft_login'); +``` + +**完成 Microsoft 登录:** +```typescript +const account = await invoke('complete_microsoft_login', { deviceCode }); +``` + +**离线登录:** +```typescript +const account = await invoke('offline_login', { username: 'Player' }); +``` + +**登出:** +```typescript +await invoke('logout'); +``` + +**获取当前账户:** +```typescript +const account = await invoke('get_current_account'); +``` + +### 事件 + +**身份验证状态:** +```typescript +listen('auth-status', (event) => { + console.log(event.payload); // "logged_in" | "logged_out" +}); +``` + +## 最佳实践 + +### 对于玩家 + +1. **对官方服务器使用 Microsoft 账户** +2. **保护令牌安全** - 不要分享 accounts.json +3. **定期刷新令牌** - 通过登录来刷新 +4. **仅在测试时使用离线模式** + +### 对于开发者 + +1. **优雅地处理令牌过期** +2. **为网络故障实现重试逻辑** +3. **缓存账户数据** 以减少 API 调用 +4. **在游戏启动前验证令牌** + +## 未来增强 + +- **多账户支持**:轻松在账户之间切换 +- **账户配置文件**:保存每个账户的设置 +- **自动登录**:记住最后一个账户 +- **令牌加密**:为存储的令牌增强安全性 + diff --git a/packages/docs/content/docs/zh/features/index.mdx b/packages/docs/content/docs/zh/features/index.mdx new file mode 100644 index 0000000..0429234 --- /dev/null +++ b/packages/docs/content/docs/zh/features/index.mdx @@ -0,0 +1,178 @@ +--- +title: 功能概览 +description: DropOut 所有功能的综合指南 +--- + +# 功能概览 + +DropOut 功能丰富,既适合休闲玩家也适合高级用户。本指南涵盖所有主要功能。 + +## 核心功能 + +<Cards> + <Card + title="身份验证" + href="/docs/features/authentication" + description="Microsoft OAuth 和离线身份验证" + /> + <Card + title="Java 管理" + href="/docs/features/java" + description="Java 运行时的自动检测和安装" + /> + <Card + title="模组加载器" + href="/docs/features/mod-loaders" + description="Fabric 和 Forge 支持,轻松安装" + /> + <Card + title="实例" + href="/docs/features/instances" + description="具有独立配置的隔离游戏环境" + /> + <Card + title="下载" + href="/docs/features/downloads" + description="快速并发下载,支持断点续传" + /> + <Card + title="AI 助手" + href="/docs/features/assistant" + description="内置 AI 助手用于故障排除和指导" + /> +</Cards> + +## 快速功能矩阵 + +| 功能 | 状态 | 描述 | +|---------|--------|-------------| +| Microsoft 身份验证 | ✅ 完成 | 使用设备代码流的 OAuth 2.0 | +| 离线身份验证 | ✅ 完成 | 用于离线游玩的本地账户 | +| 令牌自动刷新 | ✅ 完成 | 自动刷新过期的令牌 | +| Java 自动检测 | ✅ 完成 | 扫描系统中的 Java 安装 | +| Java 下载 | ✅ 完成 | 下载 Adoptium JDK/JRE 版本 | +| Fabric 支持 | ✅ 完成 | 安装和启动 Fabric 加载器 | +| Forge 支持 | ✅ 完成 | 安装和启动 Forge 加载器 | +| 实例系统 | ✅ 完成 | 隔离的游戏环境 | +| GitHub 集成 | ✅ 完成 | 查看发布和更新日志 | +| 并发下载 | ✅ 完成 | 多线程资源下载 | +| 断点续传 | ✅ 完成 | 恢复中断的下载 | +| AI 助手 | ✅ 完成 | 内置故障排除助手 | +| 配置编辑器 | ✅ 完成 | JSON/TOML 配置编辑器 | +| 自定义分辨率 | ✅ 完成 | 设置游戏窗口尺寸 | +| 内存分配 | ✅ 完成 | 自定义 JVM 内存设置 | +| 多账户 | 🚧 进行中 | 在多个账户之间切换 | +| 模组管理器 | 🚧 计划中 | 在启动器中启用/禁用模组 | +| 启动器自动更新 | 🚧 计划中 | 自我更新机制 | +| 自定义游戏目录 | 🚧 计划中 | 选择游戏文件位置 | +| 导入配置文件 | 🚧 计划中 | 从 MultiMC/Prism 导入 | + +## 性能功能 + +### 并发下载 +- 可配置的线程数(默认:10) +- 并行资源和库下载 +- 每个文件的进度跟踪 +- ETA 计算 + +### 断点续传支持 +- 中断的下载自动恢复 +- `.part` 文件跟踪进度 +- 大文件的多段下载 +- 用于状态跟踪的元数据文件 + +### 缓存 +- Java 目录缓存 24 小时 +- 本地缓存版本清单 +- 资源索引缓存 +- 库去重 + +## 用户界面功能 + +### 现代设计 +- 强制暗色模式保护眼睛 +- 粒子背景效果 +- 简洁、无干扰的布局 +- 响应式设计 + +### 实时反馈 +- 实时下载进度 +- 游戏控制台输出 +- 日志流 +- Toast 通知 + +### 设置管理 +- 内存分配滑块 +- 分辨率自定义 +- Java 路径选择 +- 线程数配置 +- 自定义 JVM 参数 + +## 高级功能 + +### 版本继承 +模组版本(Fabric/Forge)自动从父原版版本继承: +- 从父版本 + 模组加载器合并库 +- 组合并去重参数 +- 从原版版本继承资源 + +### 原生库提取 +- 特定平台的原生提取 +- 自动清理 +- 正确的库路径配置 + +### 规则引擎 +- 特定操作系统的库过滤 +- 功能标志支持 +- 架构检测 + +### 下载队列持久化 +- 保存未完成的下载 +- 启动器重启后恢复 +- 队列优先级管理 + +## 开发者功能 + +### 配置编辑器 +内置 JSON/TOML 编辑器,具有: +- 语法高亮 +- 验证 +- 快速访问所有配置 + +### 日志访问 +- 实时游戏日志 +- 启动器调试日志 +- 复制/导出功能 + +### AI 助手 +- 故障排除指导 +- 错误分析 +- 配置帮助 +- 文档搜索 + +## 即将推出 + +### 多账户管理 +- 轻松切换账户 +- 账户配置文件 +- 快速切换 + +### 模组管理器 +- 浏览和安装模组 +- 启用/禁用模组 +- 模组兼容性检查 +- 版本管理 + +### 配置文件导入 +- 从 MultiMC 导入 +- 从 Prism Launcher 导入 +- 从其他启动器导入 +- 保留设置和存档 + +### 启动器自动更新 +- 后台更新检查 +- 一键更新 +- 版本历史 +- 回滚支持 + + diff --git a/packages/docs/content/docs/zh/features/java.mdx b/packages/docs/content/docs/zh/features/java.mdx new file mode 100644 index 0000000..bdc3c15 --- /dev/null +++ b/packages/docs/content/docs/zh/features/java.mdx @@ -0,0 +1,394 @@ +--- +title: Java 管理 +description: 自动 Java 检测、下载和安装 +--- + +# Java 管理 + +DropOut 提供全面的 Java 管理,自动检测已安装的版本并根据需要下载新版本。 + +## 自动检测 + +### 系统扫描 + +DropOut 扫描多个位置查找 Java 安装: + +**Linux:** +- `/usr/lib/jvm/` +- `/usr/java/` +- `$JAVA_HOME` +- `PATH` 环境变量 + +**macOS:** +- `/Library/Java/JavaVirtualMachines/` +- `/System/Library/Java/JavaVirtualMachines/` +- `$JAVA_HOME` +- `PATH` 环境变量 + +**Windows:** +- `C:\Program Files\Java\` +- `C:\Program Files (x86)\Java\` +- `%JAVA_HOME%` +- `PATH` 环境变量 +- Windows 注册表 + +### 版本检测 + +对于找到的每个 Java 安装,DropOut 会: +1. 运行 `java -version` 获取版本信息 +2. 解析主要版本(8、11、17、21 等) +3. 检测架构(x64、ARM64) +4. 识别供应商(Oracle、Adoptium 等) + +### 结果 + +所有检测到的 Java 安装都显示在设置 → Java 中: +- 版本号 +- 安装路径 +- 架构 +- 当前选择状态 + +## Java 下载 + +### Adoptium 集成 + +DropOut 集成了 Eclipse Adoptium API 以下载高质量的免费 JDK/JRE 构建版本。 + +**支持的版本:** +- Java 8(LTS) +- Java 11(LTS) +- Java 17(LTS) +- Java 21(LTS) +- Java 23+(最新版) + +**功能:** +- 自动平台检测 +- 特定架构的构建版本 +- JDK 或 JRE 选择 +- 校验和验证 + +### 下载过程 + +1. 导航到设置 → Java +2. 点击"下载 Java" +3. 选择版本(例如 Java 17) +4. 选择 JDK 或 JRE +5. 点击下载 +6. 等待下载和解压 + +**进度跟踪:** +- 实时下载速度 +- ETA 计算 +- 解压进度 +- 安装确认 + +### 目录管理 + +Java 目录缓存 24 小时以提高性能: + +```rust +// 目录结构 +{ + "versions": [ + { + "version": "17.0.9+9", + "major": 17, + "url": "https://api.adoptium.net/...", + "sha256": "...", + "size": 123456789 + } + ], + "last_updated": 1234567890 +} +``` + +**刷新:** +- 24 小时后自动刷新 +- 设置中手动刷新 +- 下载失败时强制刷新 + +## 安装 + +### 下载目录 + +下载的 Java 运行时安装到: + +``` +~/.local/share/com.dropout.launcher/java/ (Linux) +~/Library/Application Support/com.dropout.launcher/java/ (macOS) +%APPDATA%/com.dropout.launcher/java/ (Windows) +``` + +### 目录结构 + +``` +java/ +├── jdk-17.0.9+9/ +│ ├── bin/ +│ │ └── java (或 java.exe) +│ └── lib/ +├── jdk-21.0.1+12/ +│ ├── bin/ +│ └── lib/ +└── download_queue.json +``` + +### 解压 + +1. 下载到 `.part` 文件 +2. 验证校验和 +3. 解压存档: + - Linux/macOS 上的 `.tar.gz` + - Windows 上的 `.zip` +4. 移动到 `java/<version>/` 目录 +5. 设置可执行权限(Unix) + +## 配置 + +### 内存分配 + +在设置中配置 JVM 内存: + +**最小内存:** +- 默认:1024 MB +- 推荐:原版 2048 MB +- 推荐:模组 4096+ MB + +**最大内存:** +- 默认:4096 MB +- 根据系统 RAM 调整 +- 为操作系统和其他应用留出 4GB + +**格式:** +```bash +-Xms1024M -Xmx4096M +``` + +### 自定义 JVM 参数 + +为高级配置添加自定义 JVM 参数: + +**常用参数:** +```bash +# 垃圾回收 +-XX:+UseG1GC +-XX:+UnlockExperimentalVMOptions + +# 性能 +-XX:G1NewSizePercent=20 +-XX:G1ReservePercent=20 +-XX:MaxGCPauseMillis=50 + +# 内存 +-XX:G1HeapRegionSize=32M +``` + +### Java 路径选择 + +**自动选择:** +- DropOut 为每个 Minecraft 版本推荐最佳 Java 版本 +- Java 8 用于 Minecraft 1.12.2 及更早版本 +- Java 17 用于 Minecraft 1.18-1.20.4 +- Java 21 用于 Minecraft 1.20.5+ + +**手动选择:** +1. 前往设置 → Java +2. 从检测到的安装中选择 +3. 或指定自定义路径 + +## 版本推荐 + +### Minecraft 版本 → Java 版本 + +| Minecraft 版本 | 推荐 Java | 最低 Java | +|-------------------|------------------|--------------| +| 1.7.10 及更早 | Java 8 | Java 8 | +| 1.8 - 1.12.2 | Java 8 | Java 8 | +| 1.13 - 1.16.5 | Java 8 或 11 | Java 8 | +| 1.17 - 1.17.1 | Java 16 | Java 16 | +| 1.18 - 1.20.4 | Java 17 | Java 17 | +| 1.20.5+ | Java 21 | Java 21 | + +### 模组 Minecraft + +**Fabric:** +- 通常与原版要求匹配 +- 一些模组可能需要更新的 Java + +**Forge:** +- 可能需要特定的 Java 版本 +- 检查模组加载器文档 +- 通常需要完全匹配版本 + +## 故障排除 + +### 未检测到 Java + +**问题:** 已安装的 Java 未显示 + +**解决方案:** +1. 验证 Java 在标准位置 +2. 检查 `JAVA_HOME` 环境变量 +3. 将 Java `bin` 目录添加到 `PATH` +4. 重启 DropOut +5. 手动选择路径 + +### 下载失败 + +**问题:** Java 下载未完成 + +**解决方案:** +1. 检查互联网连接 +2. 验证磁盘空间 +3. 尝试不同版本 +4. 清除下载队列 +5. 从 Adoptium 手动下载 + +### Java 版本错误 + +**问题:** 由于 Java 版本导致游戏崩溃 + +**解决方案:** +1. 检查 Minecraft 版本要求 +2. 下载正确的 Java 版本 +3. 在设置中选择适当的 Java +4. 验证 Java 路径正确 + +### 内存不足错误 + +**问题:** 游戏因内存错误崩溃 + +**解决方案:** +1. 增加最大内存分配 +2. 关闭其他应用程序 +3. 升级系统 RAM +4. 使用 64 位 Java +5. 优化 JVM 参数 + +### 性能问题 + +**问题:** 低 FPS 或卡顿 + +**解决方案:** +1. 调整内存分配(不要太高!) +2. 启用 G1GC 垃圾收集器 +3. 添加性能 JVM 参数 +4. 如兼容使用更新的 Java 版本 +5. 为整合包分配 4-8GB + +## API 参考 + +### Tauri 命令 + +**检测 Java 安装:** +```typescript +const javas = await invoke('detect_java_installations'); +// 返回: Array<{ path: string, version: string, major: number }> +``` + +**获取 Java 目录:** +```typescript +const catalog = await invoke('get_java_catalog'); +// 返回: { versions: Array<JavaVersion>, last_updated: number } +``` + +**下载 Java:** +```typescript +await invoke('download_java', { + version: '17.0.9+9', + variant: 'jdk' // 或 'jre' +}); +``` + +**取消 Java 下载:** +```typescript +await invoke('cancel_java_download'); +``` + +**设置 Java 路径:** +```typescript +await invoke('set_java_path', { path: '/path/to/java' }); +``` + +### 事件 + +**下载进度:** +```typescript +listen('java-download-progress', (event) => { + const { percent, speed, eta } = event.payload; +}); +``` + +**下载完成:** +```typescript +listen('java-download-complete', (event) => { + const { path, version } = event.payload; +}); +``` + +## 最佳实践 + +### 对于玩家 + +1. **使用 Adoptium 构建版本** - 免费、高质量、维护良好 +2. **Java 与 Minecraft 版本匹配** - 检查版本要求 +3. **不要过度分配内存** - 为操作系统留出 RAM +4. **保持 Java 更新** - 安全性和性能 +5. **使用 64 位 Java** - 大内存所需 + +### 对于开发者 + +1. **测试多个 Java 版本** - 确保兼容性 +2. **记录 Java 要求** - 帮助用户 +3. **处理缺少的 Java** - 优雅的后备方案 +4. **启动前验证 Java 路径** +5. **提供清晰的错误** - 当 Java 错误时 + +## 高级主题 + +### 自定义 Java 安装 + +使用自定义 Java 安装: + +1. 手动安装 Java +2. 记录安装路径 +3. 在 DropOut 设置 → Java 中 +4. 点击"自定义路径" +5. 浏览到 Java 可执行文件 +6. 验证版本正确 + +### 服务器用 Java + +运行 Minecraft 服务器时: + +```bash +# 推荐的服务器 JVM 参数 +-Xms4G -Xmx4G \ +-XX:+UseG1GC \ +-XX:+ParallelRefProcEnabled \ +-XX:MaxGCPauseMillis=200 \ +-XX:+UnlockExperimentalVMOptions \ +-XX:+DisableExplicitGC \ +-XX:G1NewSizePercent=30 \ +-XX:G1MaxNewSizePercent=40 \ +-XX:G1HeapRegionSize=8M \ +-XX:G1ReservePercent=20 \ +-XX:G1HeapWastePercent=5 \ +-XX:G1MixedGCCountTarget=4 \ +-XX:InitiatingHeapOccupancyPercent=15 \ +-XX:G1MixedGCLiveThresholdPercent=90 \ +-XX:G1RSetUpdatingPauseTimePercent=5 \ +-XX:SurvivorRatio=32 \ +-XX:+PerfDisableSharedMem \ +-XX:MaxTenuringThreshold=1 +``` + +### GraalVM + +GraalVM 支持高级用户: + +1. 从 graalvm.org 下载 GraalVM +2. 手动安装 +3. 作为自定义 Java 添加到 DropOut +4. 可能提高性能 +5. 使用前彻底测试 diff --git a/packages/docs/content/docs/zh/features/meta.json b/packages/docs/content/docs/zh/features/meta.json new file mode 100644 index 0000000..4725321 --- /dev/null +++ b/packages/docs/content/docs/zh/features/meta.json @@ -0,0 +1,9 @@ +{ + "title": "Features", + "pages": [ + "index", + "authentication", + "java", + "mod-loaders" + ] +} diff --git a/packages/docs/content/docs/zh/features/mod-loaders.mdx b/packages/docs/content/docs/zh/features/mod-loaders.mdx new file mode 100644 index 0000000..be5cfeb --- /dev/null +++ b/packages/docs/content/docs/zh/features/mod-loaders.mdx @@ -0,0 +1,410 @@ +--- +title: 模组加载器 +description: Fabric 和 Forge 安装和管理 +--- + +# 模组加载器 + +DropOut 支持两个最流行的 Minecraft 模组加载器:Fabric 和 Forge。两者都可以直接从启动器中轻松安装和管理。 + +## Fabric 支持 + +### 概述 + +Fabric 是一个轻量级、模块化的模组工具链,专注于: +- 快速更新至新的 Minecraft 版本 +- 干净、极简的 API +- 强大的开发者社区 +- 优异的性能 + +### 安装 + +1. 导航至 **Versions** 选项卡 +2. 点击 **"Install Fabric"** +3. 选择 Minecraft 版本 +4. 选择 Fabric 加载器版本 +5. 点击 **"Install"** +6. 等待安装完成 + +### 工作原理 + +**Meta API 集成:** +```rust +// Fetch available Fabric versions +let url = format!( + "https://meta.fabricmc.net/v2/versions/loader/{}", + minecraft_version +); +``` + +**配置文件生成:** +1. 获取 Fabric 加载器元数据 +2. 下载 Fabric 库 +3. 使用 `inheritsFrom` 生成版本 JSON +4. 与父级 Minecraft 版本合并 +5. 添加至版本列表 + +**版本格式:** +```json +{ + "id": "fabric-loader-0.15.0-1.20.4", + "inheritsFrom": "1.20.4", + "mainClass": "net.fabricmc.loader.impl.launch.knot.KnotClient", + "libraries": [...] +} +``` + +### Fabric 版本 + +**加载器版本:** +- 最新稳定版(推荐) +- 用于兼容性的特定版本 +- Beta/快照版本 + +**游戏版本:** +- 所有 1.14+ 的 Minecraft 版本 +- 支持快照版本 +- 支持战斗测试版本 + +### 库管理 + +Fabric 库从 Maven 解析: + +**主库:** +``` +net.fabricmc:fabric-loader:0.15.0 +``` + +**依赖项:** +- `net.fabricmc:tiny-mappings-parser` +- `net.fabricmc:sponge-mixin` +- `net.fabricmc:access-widener` + +**下载:** +```rust +// Maven resolution +let url = format!( + "https://maven.fabricmc.net/{}/{}", + artifact_path, filename +); +``` + +### Fabric API + +Fabric Loader ≠ Fabric API: +- **Fabric Loader**: 模组加载器(由 DropOut 安装) +- **Fabric API**: 库模组(单独下载) + +许多模组需要 Fabric API: +1. 从 [Modrinth](https://modrinth.com/mod/fabric-api) 或 [CurseForge](https://www.curseforge.com/minecraft/mc-mods/fabric-api) 下载 +2. 放置在实例的 `mods/` 文件夹中 + +## Forge 支持 + +### 概述 + +Forge 是原始的、最流行的 Minecraft 模组加载器: +- 广泛的模组生态系统 +- 成熟的 API +- 广泛的版本支持 +- 庞大的社区 + +### 安装 + +1. 导航至 **Versions** 选项卡 +2. 点击 **"Install Forge"** +3. 选择 Minecraft 版本 +4. 选择 Forge 版本 +5. 点击 **"Install"** +6. 等待安装程序运行 +7. 安装完成 + +### 工作原理 + +**Forge 安装程序:** +```rust +// Download Forge installer +let installer_url = format!( + "https://maven.minecraftforge.net/net/minecraftforge/forge/{}/forge-{}-installer.jar", + full_version, full_version +); + +// Run installer +java -jar forge-installer.jar --installClient +``` + +**配置文件解析:** +1. Forge 安装程序创建版本 JSON +2. DropOut 解析安装配置文件 +3. 提取库依赖项 +4. 处理处理器(如果有) +5. 生成启动器配置文件 + +**版本格式:** +```json +{ + "id": "1.20.4-forge-49.0.26", + "inheritsFrom": "1.20.4", + "mainClass": "cpw.mods.bootstraplauncher.BootstrapLauncher", + "libraries": [...] +} +``` + +### Forge 版本 + +**发布类型:** +- **Latest**: 最新的稳定版本 +- **Recommended**: 生产环境中最稳定的版本 +- **Specific**: 版本锁定以确保兼容性 + +**Minecraft 版本支持:** +- 旧版本 (1.6.4+) +- 现代版本 (1.13+) +- 最新版本 (1.20+) + +### 库管理 + +Forge 有许多库: + +**核心库:** +- `net.minecraftforge:forge:<version>` +- `net.minecraftforge:fmlloader:<version>` +- `org.ow2.asm:asm:<version>` + +**解析:** +```rust +// Forge Maven +"https://maven.minecraftforge.net/" + +// Dependencies may use: +// - Maven Central +// - Minecraft Libraries +``` + +### Forge 处理器 + +某些 Forge 版本在安装期间运行"处理器": +- 字节码操纵 +- 库修补 +- 映射生成 + +DropOut 自动处理这些操作。 + +## 版本继承 + +Fabric 和 Forge 都使用 Minecraft 的继承系统: + +### 父版本 + +```json +{ + "id": "fabric-loader-0.15.0-1.20.4", + "inheritsFrom": "1.20.4" // Parent vanilla version +} +``` + +### 合并过程 + +**库:** +```rust +// Merged from both +parent_libraries + modded_libraries +// Duplicates removed +``` + +**参数:** +```rust +// Combined +parent_jvm_args + modded_jvm_args +parent_game_args + modded_game_args +``` + +**资源:** +```rust +// Inherited from parent +assets = parent.assets +``` + +**主类:** +```rust +// Overridden by modded +main_class = modded.mainClass +``` + +## 对比 + +| 功能 | Fabric | Forge | +|---------|--------|-------| +| **性能** | 优异 | 良好 | +| **更新速度** | 非常快 | 中等 | +| **模组选择** | 增长中 | 广泛 | +| **API 简洁性** | 简洁 | 复杂 | +| **版本支持** | 1.14+ | 1.6.4+ | +| **开发者友好** | 非常友好 | 中等 | +| **稳定性** | 优异 | 优异 | + +## 安装模组 + +### Fabric 模组 + +1. 创建/选择实例 +2. 确保 Fabric 已安装 +3. 从以下位置下载模组: + - [Modrinth](https://modrinth.com/) + - [CurseForge](https://www.curseforge.com/) + - [GitHub Releases](https://github.com/) +4. 将 `.jar` 文件放置在 `instances/<name>/mods/` +5. 启动游戏 + +**兼容性:** +- 检查 Minecraft 版本 +- 检查 Fabric Loader 版本 +- 检查 Fabric API 需求 +- 阅读模组依赖项 + +### Forge 模组 + +1. 创建/选择实例 +2. 确保 Forge 已安装 +3. 从以下位置下载模组: + - [CurseForge](https://www.curseforge.com/) + - [Modrinth](https://modrinth.com/) +4. 将 `.jar` 文件放置在 `instances/<name>/mods/` +5. 启动游戏 + +**兼容性:** +- 精确检查 Minecraft 版本 +- 检查 Forge 版本范围 +- 阅读模组依赖项 +- 检查冲突 + +## 故障排除 + +### Fabric 问题 + +**"Fabric Loader not found"** +- 重新安装 Fabric +- 检查版本 JSON 是否存在 +- 验证库是否已下载 + +**"Mixin apply failed"** +- 模组不兼容 +- 删除冲突的模组 +- 更新 Fabric Loader + +**"Fabric API required"** +- 下载 Fabric API +- 匹配 Minecraft 版本 +- 放置在 mods 文件夹中 + +### Forge 问题 + +**"Forge installer failed"** +- 验证 Java 安装 +- 检查磁盘空间 +- 尝试旧版本的 Forge +- 检查日志获取详细信息 + +**"Missing dependencies"** +- 安装所需的模组 +- 检查模组版本兼容性 +- 仔细阅读错误消息 + +**"Class not found"** +- Forge 版本不匹配 +- 重新安装 Forge +- 验证库是否已下载 + +### 常见模组问题 + +**启动时崩溃:** +1. 检查崩溃报告 +2. 识别有问题的模组 +3. 删除或更新模组 +4. 使用最少的模组测试 +5. 逐步添加模组回来 + +**性能问题:** +1. 安装了太多模组 +2. 增加内存分配 +3. 安装性能模组: + - Fabric: Sodium, Lithium + - Forge: OptiFine, Magnesium +4. 删除资源密集型模组 + +## API 参考 + +### Tauri 命令 + +**安装 Fabric:** +```typescript +await invoke('install_fabric', { + minecraftVersion: '1.20.4', + loaderVersion: '0.15.0' +}); +``` + +**安装 Forge:** +```typescript +await invoke('install_forge', { + minecraftVersion: '1.20.4', + forgeVersion: '49.0.26' +}); +``` + +**列出 Fabric 版本:** +```typescript +const versions = await invoke('get_fabric_versions', { + minecraftVersion: '1.20.4' +}); +``` + +**列出 Forge 版本:** +```typescript +const versions = await invoke('get_forge_versions', { + minecraftVersion: '1.20.4' +}); +``` + +### 事件 + +**安装进度:** +```typescript +listen('mod-loader-progress', (event) => { + const { stage, percent } = event.payload; + // Stages: "downloading", "installing", "processing", "complete" +}); +``` + +## 最佳实践 + +### 对于玩家 + +1. **每个实例选择一个模组加载器** +2. **精确匹配版本** - Minecraft 和加载器 +3. **安装前阅读模组要求** +4. **循序渐进** - 逐步添加模组 +5. **备份世界** - 添加模组前备份 +6. **检查兼容性** 列表 +7. **谨慎更新** - 在单独的实例中测试 + +### 对于模组包创建者 + +1. **记录版本** - MC、加载器、所有模组 +2. **彻底测试** - 所有功能 +3. **列出依赖项** - 包括 API +4. **提供更新日志** - 用于更新 +5. **版本锁定** - 为了稳定性 +6. **包含配置** - 预配置 +7. **测试更新** - 发布前测试 + +## 未来功能 + +- **模组浏览器** - 从启动器安装模组 +- **自动更新** - 保持模组最新 +- **依赖项解析** - 自动安装需求 +- **冲突检测** - 警告不兼容性 +- **配置文件导出** - 共享模组包配置 +- **CurseForge 集成** - 直接模组包导入 +- **Modrinth 集成** - 模组搜索和安装 + diff --git a/packages/docs/content/docs/zh/getting-started.mdx b/packages/docs/content/docs/zh/getting-started.mdx new file mode 100644 index 0000000..abc5dc9 --- /dev/null +++ b/packages/docs/content/docs/zh/getting-started.mdx @@ -0,0 +1,162 @@ +--- +title: 快速开始 +description: 使用 DropOut Minecraft 启动器的快速入门指南 +--- + +# 快速开始 + +DropOut 是一个使用 Tauri v2 和 Rust 构建的现代化、可复现、开发者级别的 Minecraft 启动器。本指南将帮助你开始安装和使用 DropOut。 + +## 安装 + +### 下载预编译二进制文件 + +从[发布页面](https://github.com/HsiangNianian/DropOut/releases)下载适合你平台的最新版本。 + +| 平台 | 文件 | +| -------------- | ----------------------- | +| Linux x86_64 | `.deb`, `.AppImage` | +| Linux ARM64 | `.deb`, `.AppImage` | +| macOS ARM64 | `.dmg` | +| Windows x86_64 | `.msi`, `.exe` | +| Windows ARM64 | `.msi`, `.exe` | + +### Linux 安装 + +#### 使用 .deb 包 +```bash +sudo dpkg -i dropout_*.deb +# 如果需要,修复依赖 +sudo apt-get install -f +``` + +#### 使用 AppImage +```bash +chmod +x dropout_*.AppImage +./dropout_*.AppImage +``` + +### macOS 安装 + +1. 打开下载的 `.dmg` 文件 +2. 将 DropOut 拖到应用程序文件夹 +3. 如果看到安全警告,转到系统偏好设置 → 安全性与隐私并允许该应用 + +### Windows 安装 + +#### 使用 .msi 安装程序 +1. 双击 `.msi` 文件 +2. 按照安装向导操作 +3. 从开始菜单启动 DropOut + +#### 使用 .exe 便携版 +1. 双击 `.exe` 文件 +2. DropOut 将直接运行,无需安装 + +## 首次启动 + +首次启动 DropOut 时,你需要: + +1. **选择认证方式** + - **微软账户**: 推荐用于官方 Minecraft + - **离线模式**: 用于测试或离线游戏 + +2. **配置 Java 运行时** + - DropOut 将自动检测已安装的 Java 版本 + - 如果需要,你可以直接从启动器下载 Java + +3. **选择 Minecraft 版本** + - 浏览可用的 Minecraft 版本 + - 选择原版或模组版本(Fabric/Forge) + +## 快速入门教程 + +### 1. 登录 + +<Cards> + <Card + title="微软账户" + description="使用你的官方 Minecraft 账户登录" + /> + <Card + title="离线模式" + description="创建本地配置文件进行离线游戏" + /> +</Cards> + +**微软登录:** +1. 点击"使用微软登录" +2. 将显示设备代码 +3. 访问显示的 URL 并输入代码 +4. 授权应用程序 +5. 返回 DropOut - 你将自动登录 + +**离线登录:** +1. 点击"离线模式" +2. 输入用户名 +3. 点击"创建账户" + +### 2. 安装 Minecraft + +1. 导航到**版本**标签 +2. 浏览可用的 Minecraft 版本 +3. 点击一个版本进行安装 +4. 等待下载完成 + +### 3. 启动游戏 + +1. 转到**主页**标签 +2. 从下拉菜单中选择你想要的版本 +3. 如果需要,调整设置: + - 内存分配(RAM) + - 窗口分辨率 + - Java 路径 +4. 点击**"启动游戏"** +5. 在控制台中监视启动过程 + +## 下一步 + +<Cards> + <Card + title="功能特性" + href="/docs/features" + description="了解 DropOut 提供的所有功能" + /> + <Card + title="实例管理" + href="/docs/features/instances" + description="创建隔离的游戏环境" + /> + <Card + title="模组加载器" + href="/docs/features/mod-loaders" + description="安装和管理 Fabric 和 Forge" + /> + <Card + title="故障排除" + href="/docs/troubleshooting" + description="常见问题和解决方案" + /> +</Cards> + +## 系统要求 + +### 最低要求 +- **操作系统**: Windows 10+、macOS 11+ 或 Linux(基于 Debian) +- **内存**: 4GB(推荐 8GB 用于模组 Minecraft) +- **存储**: 启动器 + 游戏文件需要 2GB +- **Java**: 如果找不到,DropOut 会自动安装 + +### 推荐配置 +- **操作系统**: 你操作系统的最新稳定版本 +- **内存**: 16GB 以获得带模组的最佳性能 +- **存储**: 10GB+ 用于多个版本和模组 +- **Java**: Java 17 或 21(由 DropOut 管理) + +## 获取帮助 + +如果遇到问题: +- 查看[故障排除指南](/docs/troubleshooting) +- 在 [GitHub Issues](https://github.com/HsiangNianian/DropOut/issues) 上报告 bug +- 加入我们的社区讨论 + diff --git a/packages/docs/content/docs/zh/index.mdx b/packages/docs/content/docs/zh/index.mdx new file mode 100644 index 0000000..1c18be2 --- /dev/null +++ b/packages/docs/content/docs/zh/index.mdx @@ -0,0 +1,95 @@ +--- +title: 欢迎使用 DropOut +description: 现代化、可复现、开发者级别的 Minecraft 启动器 +--- + +# 欢迎使用 DropOut + +DropOut 是一个使用 Tauri v2 和 Rust 构建的现代 Minecraft 启动器,专为重视控制、透明度和长期稳定性的玩家设计。 + +<div style="text-align: center; margin: 2rem 0;"> + <img src="/assets/image.png" alt="DropOut 启动器" style="max-width: 700px; border-radius: 8px;" /> +</div> + +## 为什么选择 DropOut? + +大多数 Minecraft 启动器专注于让你进入游戏。DropOut 专注于保持你的游戏**稳定**、**可调试**和**可复现**。 + +- 你的实例昨天还能用,今天就坏了?→ **DropOut 让它可追溯。** +- 分享模组包意味着打包数GB的文件?→ **DropOut 分享精确的依赖清单。** +- Java、加载器、模组、配置不同步?→ **DropOut 将它们锁定在一起。** + +这个启动器是为重视控制、透明度和长期稳定性的玩家构建的。 + +## 快速链接 + +<Cards> + <Card + title="快速开始" + href="/docs/getting-started" + description="在几分钟内安装和设置 DropOut" + /> + <Card + title="功能特性" + href="/docs/features" + description="探索 DropOut 的所有功能" + /> + <Card + title="架构设计" + href="/docs/architecture" + description="了解技术设计" + /> + <Card + title="开发指南" + href="/docs/development" + description="构建和贡献代码" + /> +</Cards> + +## 核心特性 + +### 🚀 高性能 +使用 Rust 和 Tauri 构建,资源占用最小,启动速度极快。 + +### 🎨 现代化界面 +简洁、无干扰的界面,使用 Svelte 5、Tailwind CSS 4 和粒子效果。 + +### 🔐 安全认证 +微软 OAuth 2.0 设备代码流和离线认证支持。 + +### 🔧 模组加载器支持 +内置 Fabric 和 Forge 安装,自动版本管理。 + +### ☕ Java 管理 +自动检测已安装的 Java 版本,集成 Adoptium JDK/JRE 下载器。 + +### 📦 实例系统 +独立的游戏环境,具有独立的配置、模组和存档。 + +### 🤖 AI 助手 +内置 AI 帮助,用于故障排除、配置和指导。 + +### ⚡ 快速下载 +并发资源和库下载,支持断点续传和进度跟踪。 + +## 技术栈 + +- **后端**: Rust + Tauri v2 +- **前端**: Svelte 5 with runes +- **样式**: Tailwind CSS 4 +- **构建工具**: Vite with Rolldown +- **文档**: Fumadocs with React Router + +## 社区 + +- **GitHub**: [HydroRoll-Team/DropOut](https://github.com/HydroRoll-Team/DropOut) +- **问题反馈**: [报告 bug](https://github.com/HydroRoll-Team/DropOut/issues) +- **开发路线图**: [查看开发路线图](https://roadmap.sh/r/minecraft-launcher-dev) + +## 许可证 + +DropOut 是在 MIT 许可证下的开源软件。 + +--- + +准备好开始了吗?查看[快速开始指南](/docs/getting-started)!
\ No newline at end of file diff --git a/packages/docs/content/docs/zh/meta.json b/packages/docs/content/docs/zh/meta.json new file mode 100644 index 0000000..8ad7ea2 --- /dev/null +++ b/packages/docs/content/docs/zh/meta.json @@ -0,0 +1,19 @@ +{ + "title": "Documentation", + "pages": [ + "index", + "getting-started", + "architecture", + { + "title": "Features", + "pages": [ + "features/index", + "features/authentication", + "features/java", + "features/mod-loaders" + ] + }, + "development", + "troubleshooting" + ] +} diff --git a/packages/docs/content/docs/zh/troubleshooting.mdx b/packages/docs/content/docs/zh/troubleshooting.mdx new file mode 100644 index 0000000..3785adc --- /dev/null +++ b/packages/docs/content/docs/zh/troubleshooting.mdx @@ -0,0 +1,523 @@ +--- +title: 故障排除 +description: DropOut 启动器常见问题和解决方案 +--- + +# 故障排除 + +本指南涵盖常见问题及其解决方案。如果在这里找不到你的问题,请在 GitHub 上[提交 issue](https://github.com/HydroRoll-Team/DropOut/issues)。 + +## 安装问题 + +### Linux:缺少依赖 + +**问题:** 安装时提示缺少库 + +**解决方案:** +```bash +# Ubuntu/Debian +sudo apt update +sudo apt install libwebkit2gtk-4.1-0 libgtk-3-0 + +# Fedora +sudo dnf install webkit2gtk4.1 gtk3 + +# Arch +sudo pacman -S webkit2gtk gtk3 +``` + +### macOS:"应用程序已损坏" + +**问题:** macOS 提示 DropOut 已损坏无法打开 + +**解决方案:** +1. 打开终端 +2. 运行:`xattr -cr /Applications/DropOut.app` +3. 再次尝试打开 +4. 或者:系统偏好设置 → 安全性 → 仍要打开 + +### Windows:SmartScreen 警告 + +**问题:** Windows SmartScreen 阻止安装程序 + +**解决方案:** +1. 点击"更多信息" +2. 点击"仍要运行" +3. 这对于没有扩展验证证书的新应用是正常的 + +## 身份验证问题 + +### Microsoft 登录失败 + +**问题:** 无法完成 Microsoft 登录 + +**可能原因和解决方案:** + +**1. 设备代码过期:** +- 代码在 15 分钟后过期 +- 重新开始登录过程 +- 更快地完成授权 + +**2. 网络问题:** +- 检查互联网连接 +- 暂时禁用 VPN +- 检查防火墙设置 +- 尝试不同的网络 + +**3. Microsoft 账户问题:** +- 验证账户拥有 Minecraft Java 版 +- 在 https://www.minecraft.net/profile 检查 +- 确保账户未被封禁 + +**4. 浏览器问题:** +- 尝试不同的浏览器 +- 清除浏览器缓存 +- 禁用广告拦截器 +- 使用无痕/隐私模式 + +### 令牌刷新失败 + +**问题:** 令牌刷新失败,必须频繁重新登录 + +**解决方案:** +1. 完全退出登录 +2. 从应用数据目录删除 `accounts.json` +3. 重新登录 +4. 如果持续存在,检查 Microsoft 账户状态 + +### 离线登录不工作 + +**问题:** 无法创建离线账户 + +**解决方案:** +- 用户名必须是 3-16 个字符 +- 仅使用字母、数字、下划线 +- 不使用特殊字符 +- 不使用空格 + +## 游戏启动问题 + +### 找不到 Java + +**问题:** "未找到 Java 安装" + +**解决方案:** + +**1. 自动检测现有 Java:** +- 设置 → Java → 检测安装 +- 如果找到,选择它 +- 如果未找到,进行步骤 2 + +**2. 通过 DropOut 下载 Java:** +- 设置 → Java → 下载 Java +- 选择适当的版本: + - Java 8 用于 Minecraft 1.12.2 及更早版本 + - Java 17 用于 Minecraft 1.18-1.20.4 + - Java 21 用于 Minecraft 1.20.5+ + +**3. 手动安装 Java:** +- 从 [Adoptium](https://adoptium.net/) 下载 +- 安装到系统 +- 重启 DropOut +- 再次检测 + +### Java 版本错误 + +**问题:** 游戏崩溃并提示"不支持的类文件版本" + +**解决方案:** +将 Java 版本与 Minecraft 版本匹配: + +| Minecraft 版本 | Java 版本 | +|-------------------|--------------| +| 1.7.10 及更早 | Java 8 | +| 1.8 - 1.12.2 | Java 8 | +| 1.13 - 1.16.5 | Java 8 或 11 | +| 1.17 - 1.17.1 | Java 16 | +| 1.18 - 1.20.4 | Java 17 | +| 1.20.5+ | Java 21 | + +### 内存不足错误 + +**问题:** 游戏崩溃并显示 `java.lang.OutOfMemoryError` + +**解决方案:** + +**1. 增加内存分配:** +- 设置 → 内存 +- 增加最大内存: + - 原版:最少 4GB + - 轻度模组:6GB + - 重度整合包:8-12GB +- 不要超过系统 RAM 的 80% + +**2. 使用 64 位 Java:** +- 检查当前 Java 架构 +- 如需要下载 64 位 Java +- 32 位 Java 限制在约 2GB + +**3. 降低渲染距离:** +- 游戏内视频设置 +- 将渲染距离降低到 8-12 区块 + +**4. 优化 JVM 参数:** +```bash +-Xms4G -Xmx8G -XX:+UseG1GC -XX:+UnlockExperimentalVMOptions +``` + +### 游戏无法启动 + +**问题:** 游戏不启动,没有错误消息 + +**检查:** + +**1. 日志输出:** +- 检查 DropOut 中的游戏控制台 +- 查找错误消息 +- 常见问题: + - 文件缺失 + - 下载损坏 + - 模组冲突 + +**2. 验证文件:** +- 删除版本文件夹 +- 重新下载版本 +- 在模组版本之前先尝试原版 + +**3. 检查权限:** +- 确保 DropOut 可以写入游戏目录 +- 检查文件夹权限 +- 在 Linux 上:`chmod -R 755 ~/.local/share/com.dropout.launcher` + +## 下载问题 + +### 下载失败 + +**问题:** 资源或库下载失败 + +**解决方案:** + +**1. 网络问题:** +- 检查互联网连接 +- 禁用 VPN +- 尝试不同的网络 +- 检查防火墙/杀毒软件 + +**2. 恢复下载:** +- DropOut 自动恢复中断的下载 +- 关闭并重新打开 DropOut +- 下载应该继续 + +**3. 清除下载缓存:** +- 删除 libraries/assets 中的 `.part` 文件 +- 重新开始下载 + +**4. 手动下载:** +- 检查日志中失败的 URL +- 手动下载文件 +- 放置在正确位置 + +### 下载缓慢 + +**问题:** 下载非常慢 + +**解决方案:** + +**1. 调整线程数:** +- 设置 → 下载 +- 尝试不同的线程数: + - 太低:整体较慢 + - 太高:连接限流 + - 推荐:5-10 个线程 + +**2. 网络优化:** +- 关闭占用大量带宽的应用 +- 如可能使用有线连接 +- 检查 ISP 限速 + +**3. 备用 CDN:** +- Mojang 镜像可能很慢 +- 尝试在一天中的不同时间 + +## 模组加载器问题 + +### Fabric 安装失败 + +**问题:** 无法安装 Fabric 加载器 + +**解决方案:** + +**1. 检查 Minecraft 版本:** +- Fabric 支持 1.14+ +- 不支持更早版本 +- 尝试更新的 Minecraft 版本 + +**2. 网络问题:** +- 检查互联网连接 +- Fabric Meta API 可能宕机 +- 稍后再试 + +**3. 手动安装:** +- 从 [fabricmc.net](https://fabricmc.net/) 下载 Fabric +- 使用官方安装器 +- 将配置文件导入 DropOut + +### Forge 安装失败 + +**问题:** Forge 安装器失败或挂起 + +**解决方案:** + +**1. Java 版本:** +- 确保 Java 版本正确 +- Forge 1.17+ 需要 Java 16+ +- 更早的 Forge 可能需要 Java 8 + +**2. 安装器超时:** +- Forge 安装器可能很慢 +- 等待最多 10 分钟 +- 检查日志查看进度 + +**3. 磁盘空间:** +- 确保有足够的可用空间 +- Forge 临时需要约 1GB +- 检查 Linux 上的 `/tmp` + +**4. 手动安装:** +- 从 [minecraftforge.net](https://files.minecraftforge.net/) 下载 Forge 安装器 +- 手动运行安装器 +- 选择安装客户端 +- 导入配置文件 + +### 模组崩溃 + +**问题:** 安装模组后游戏崩溃 + +**解决方案:** + +**1. 检查兼容性:** +- 验证模组适用于正确的 Minecraft 版本 +- 检查模组加载器版本要求 +- 阅读模组说明了解依赖项 + +**2. 安装依赖项:** +- Fabric 模组通常需要 Fabric API +- 一些模组需要库 +- 检查崩溃日志中的"缺失"错误 + +**3. 移除冲突的模组:** +- 逐一禁用模组 +- 识别有问题的模组 +- 检查已知冲突 +- 更新或替换模组 + +**4. 更新模组:** +- 使用最新的模组版本 +- 检查模组更新说明 +- 一些更新修复崩溃 + +## 性能问题 + +### 低 FPS + +**问题:** 游戏运行缓慢或卡顿 + +**解决方案:** + +**1. 分配更多内存:** +- 将最大内存增加到 6-8GB +- 不要过度分配(导致 GC 暂停) + +**2. 安装性能模组:** +- **Fabric**: Sodium、Lithium、Phosphor +- **Forge**: OptiFine、Magnesium、Rubidium + +**3. 优化设置:** +- 降低渲染距离 +- 禁用精美图形 +- 关闭粒子 +- 如果 fps < 60 禁用垂直同步 + +**4. 更新显卡驱动:** +- 从制造商下载最新版本 +- NVIDIA: GeForce Experience +- AMD: Adrenalin +- Intel: Graphics Command Center + +**5. 关闭后台应用:** +- 释放系统资源 +- 禁用覆盖层(Discord 等) +- 检查任务管理器中的 CPU/RAM 占用 + +### 启动器启动缓慢 + +**问题:** DropOut 启动时间很长 + +**解决方案:** + +**1. 检查系统资源:** +- 关闭不必要的程序 +- 确保有足够的 RAM 可用 +- 检查 CPU 使用率 + +**2. 杀毒软件干扰:** +- 将 DropOut 添加到例外 +- 暂时禁用以测试 +- 一些杀毒软件会显著减慢速度 + +**3. 损坏的数据:** +- 删除应用数据中的 `cache` 文件夹 +- 重启 DropOut +- 将重建缓存 + +## UI 问题 + +### 窗口不打开 + +**问题:** DropOut 窗口不出现 + +**解决方案:** + +**1. 检查是否在运行:** +```bash +# Linux/macOS +ps aux | grep dropout + +# Windows +tasklist | findstr dropout +``` + +**2. 终止并重启:** +```bash +# Linux/macOS +pkill dropout + +# Windows +taskkill /F /IM dropout.exe +``` + +**3. 重置窗口位置:** +- 删除窗口状态配置 +- 重启 DropOut + +### 图形故障 + +**问题:** UI 看起来不对或有视觉伪影 + +**解决方案:** + +**1. 更新显卡驱动:** +- 安装最新驱动 +- 重启系统 + +**2. 禁用硬件加速:** +- 检查设置中是否存在选项 +- 可能会降低性能但修复故障 + +**3. 尝试不同的显示器:** +- 多显示器设置可能导致问题 +- 在不同显示器上尝试 + +## 文件系统问题 + +### 无法访问游戏目录 + +**问题:** 访问游戏文件时出错 + +**解决方案:** + +**1. 检查权限:** +```bash +# Linux +chmod -R 755 ~/.local/share/com.dropout.launcher + +# macOS +chmod -R 755 ~/Library/Application\ Support/com.dropout.launcher +``` + +**2. 检查磁盘空间:** +- 确保有足够的可用空间 +- Minecraft 需要 2-10GB,取决于模组 +- 清理旧版本 + +**3. 杀毒软件阻止:** +- 将游戏目录添加到例外 +- 一些杀毒软件会阻止文件访问 + +### 文件损坏 + +**问题:** 文件似乎损坏或无效 + +**解决方案:** + +**1. 验证校验和:** +- DropOut 验证 SHA1/SHA256 +- 验证失败会触发重新下载 + +**2. 重新下载:** +- 删除损坏的文件 +- 再次启动版本 +- DropOut 将重新下载 + +**3. 清除缓存:** +- 完全删除版本文件夹 +- 从头重新安装 + +## 获取更多帮助 + +### 收集调试信息 + +报告问题时,包括: + +**1. 系统信息:** +- 操作系统和版本 +- DropOut 版本 +- Java 版本 + +**2. 日志:** +- 控制台的启动器日志 +- 如适用的游戏日志 +- 错误消息(完整文本) + +**3. 重现步骤:** +- 你做了什么 +- 你期望什么 +- 实际发生了什么 + +**4. 截图:** +- 错误消息 +- UI 问题 +- 设置屏幕 + +### 报告问题 + +1. 搜索[现有 issues](https://github.com/HydroRoll-Team/DropOut/issues) +2. 如果未找到,[创建新 issue](https://github.com/HydroRoll-Team/DropOut/issues/new) +3. 使用 issue 模板 +4. 提供所有要求的信息 +5. 保持耐心和响应 + +### 社区支持 + +- **GitHub 讨论**:提问 +- **Discord**:实时帮助(如果可用) +- **文档**:查看所有指南 + +## 已知问题 + +### 目前正在处理 + +- 多账户切换(进行中) +- 自定义游戏目录选择(计划中) +- 启动器自动更新(计划中) + +### 可用的变通方法 + +**问题**:无法轻松切换账户 +**变通方法**:退出登录并使用不同账户登录 + +**问题**:没有内置模组管理器 +**变通方法**:在实例文件夹中手动管理模组 + +**问题**:无法从其他启动器导入 +**变通方法**:手动复制实例文件 |