108 lines
5.5 KiB
Markdown
108 lines
5.5 KiB
Markdown
# OneLauncher-Cracked 2.8.0 Update Implementation Plan
|
|
|
|
> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking.
|
|
|
|
**Goal:** Rebase and upgrade OneLauncher-Cracked onto upstream OneLauncher 2.8.0 (`1d6ec598`), preserving all offline authentication bypasses, the local Yggdrasil skin server with authlib-injector, Forgejo auto-updater, and custom skin changer UI.
|
|
|
|
**Architecture:** Port 37 cracked subsystem files onto the clean upstream 2.8.0 codebase. Maintain strict isolation for cracked authentication and skin server logic while adopting upstream's new multi-instance management, package manager filters, and Freya improvements.
|
|
|
|
**Tech Stack:** Rust 2024, Freya (Dioxus + Skia), Tokio, Reqwest, RSA PKCS#1v15, Authlib-Injector, Forgejo API v1.
|
|
|
|
**Spec:** Direct human instruction: "update to version 2.8.0".
|
|
|
|
## Global Constraints
|
|
- Target version: `2.8.0-c1`.
|
|
- Offline authentication must require 0 Microsoft accounts.
|
|
- Local Yggdrasil skin server must eliminate multiplayer skin cloning via RSA-signed profile properties.
|
|
- Auto-updater must target Forgejo API at `https://git.oiupoyt.space/api/v1/repos/oiupoyt/OneLauncher-Cracked/releases/latest`.
|
|
- All workspace crates must pass tests and compilation without regressions.
|
|
|
|
---
|
|
|
|
### Task 1: Project Metadata, Packaging & Workflows
|
|
|
|
**Files:**
|
|
- Modify: `Cargo.toml`
|
|
- Modify: `README.md`
|
|
- Modify: `.gitignore`
|
|
- Create: `.forgejo/workflows/release.yml`
|
|
- Create: `packages/oneclient_app/distribution/linux/oneclient_app.desktop`
|
|
|
|
- [ ] **Step 1: Update Cargo.toml metadata and dev profile**
|
|
- [ ] **Step 2: Update README.md with warning embed and Forgejo releases link**
|
|
- [ ] **Step 3: Add .forgejo release workflow and desktop file**
|
|
- [ ] **Step 4: Commit task 1**
|
|
|
|
---
|
|
|
|
### Task 2: Port Offline Authentication Bypass (`oneclient_auth`)
|
|
|
|
**Files:**
|
|
- Modify: `packages/oneclient_auth/src/service.rs`
|
|
- Modify: `packages/oneclient_auth/src/store.rs`
|
|
- Modify: `packages/oneclient_auth/tests/offline.rs`
|
|
|
|
- [ ] **Step 1: In `service.rs`, remove `OfflineRequiresMicrosoft` check from `account_for_launch`**
|
|
- [ ] **Step 2: In `store.rs`, allow offline accounts without Microsoft accounts and auto-select default user**
|
|
- [ ] **Step 3: In `tests/offline.rs`, ensure tests assert offline launch succeeds without Microsoft**
|
|
- [ ] **Step 4: Run `cargo test -p oneclient_auth` and verify all tests pass**
|
|
- [ ] **Step 5: Commit task 2**
|
|
|
|
---
|
|
|
|
### Task 3: Port Path Helpers, Assets & Offline Skin Engine (`oneclient_common` & `oneclient_core`)
|
|
|
|
**Files:**
|
|
- Modify: `packages/oneclient_common/src/paths.rs`
|
|
- Modify: `packages/oneclient_core/Cargo.toml`
|
|
- Copy assets: `packages/oneclient_core/assets/authlib-injector.jar`
|
|
- Copy assets: `packages/oneclient_core/assets/offlineskins-fabric.jar`
|
|
- Create: `packages/oneclient_core/src/game/skin_server.rs`
|
|
- Modify: `packages/oneclient_core/src/game/mod.rs`
|
|
- Modify: `packages/oneclient_core/src/game/launch.rs`
|
|
|
|
- [ ] **Step 1: Add skin paths and authlib-injector path to `oneclient_common/src/paths.rs`**
|
|
- [ ] **Step 2: Copy embedded jar assets and add dependencies to `oneclient_core/Cargo.toml`**
|
|
- [ ] **Step 3: Port `skin_server.rs` and register module in `game/mod.rs`**
|
|
- [ ] **Step 4: In `game/launch.rs`, inject authlib-injector `-javaagent`, `--userProperties`, and offline skin synchronization**
|
|
- [ ] **Step 5: Run `cargo test -p oneclient_core` and verify all tests pass**
|
|
- [ ] **Step 6: Commit task 3**
|
|
|
|
---
|
|
|
|
### Task 4: Port UI Components, Skins Tab & Auto-Updater (`oneclient_app`)
|
|
|
|
**Files:**
|
|
- Modify: `packages/oneclient_app/src/constants.rs`
|
|
- Modify: `packages/oneclient_app/src/updater.rs`
|
|
- Modify: `packages/oneclient_app/src/components/avatar.rs`
|
|
- Modify: `packages/oneclient_app/src/components/player_model.rs`
|
|
- Modify: `packages/oneclient_app/src/components/navbar/app_navbar.rs`
|
|
- Create: `packages/oneclient_app/src/view/app/skins.rs`
|
|
- Create: `packages/oneclient_app/src/hooks/queries/skin.rs`
|
|
- Modify: `packages/oneclient_app/src/hooks/queries/mod.rs`
|
|
- Modify: `packages/oneclient_app/src/hooks/mod.rs`
|
|
- Modify: `packages/oneclient_app/src/view/onboarding/account.rs`
|
|
- Modify: `packages/oneclient_app/src/view/app/settings/accounts.rs`
|
|
- Modify: `packages/oneclient_app/src/layout/root_layout.rs`
|
|
- Modify: `packages/oneclient_app/src/routes.rs`
|
|
|
|
- [ ] **Step 1: Update `constants.rs` and `updater.rs` with Forgejo releases endpoint and `CrackedVersion` semver parser**
|
|
- [ ] **Step 2: Port skin queries in `hooks/queries/skin.rs` and wire into `hooks/mod.rs`**
|
|
- [ ] **Step 3: Port `skins.rs` view and register route in `routes.rs` and `root_layout.rs`**
|
|
- [ ] **Step 4: Add Skins pill button to `navbar_center` in `app_navbar.rs`**
|
|
- [ ] **Step 5: Port avatar persistent cache in `avatar.rs` and player model custom skin loading in `player_model.rs`**
|
|
- [ ] **Step 6: Port offline account inputs in onboarding (`onboarding/account.rs`) and settings (`settings/accounts.rs`)**
|
|
- [ ] **Step 7: Run `cargo test -p oneclient_app --lib` and verify all tests pass**
|
|
- [ ] **Step 8: Commit task 4**
|
|
|
|
---
|
|
|
|
### Task 5: Verification, Packaging & Deployment
|
|
|
|
- [ ] **Step 1: Run full workspace `cargo check --workspace`**
|
|
- [ ] **Step 2: Build release binary locally**
|
|
- [ ] **Step 3: Package `.AppImage`, `.deb`, and `.tar.gz` for Linux**
|
|
- [ ] **Step 4: Merge `update/2.8.0` into `main`**
|
|
- [ ] **Step 5: Tag `v2.8.0-c1` and push branch and tag to Forgejo and GitHub**
|
|
- [ ] **Step 6: Publish Forgejo Release `v2.8.0-c1` with all binaries attached**
|