From 9b59469cfe0a46d127efd640142da249dafceec5 Mon Sep 17 00:00:00 2001 From: HsiangNianian Date: Wed, 14 Jan 2026 15:34:55 +0800 Subject: fix: prevent feature-based rules from being applied in library checks --- src-tauri/src/core/game_version.rs | 1 + 1 file changed, 1 insertion(+) (limited to 'src-tauri/src/core/game_version.rs') diff --git a/src-tauri/src/core/game_version.rs b/src-tauri/src/core/game_version.rs index 572882f..31477a9 100644 --- a/src-tauri/src/core/game_version.rs +++ b/src-tauri/src/core/game_version.rs @@ -52,6 +52,7 @@ pub struct Library { pub struct Rule { pub action: String, // "allow" or "disallow" pub os: Option, + pub features: Option, // Feature-based rules (e.g., is_demo_user, has_quick_plays_support) } #[derive(Debug, Deserialize)] -- cgit v1.2.3-70-g09d2 From cba180b0d625b26bcf810dec3c5b6d24ff5b1568 Mon Sep 17 00:00:00 2001 From: HsiangNianian Date: Wed, 14 Jan 2026 16:37:51 +0800 Subject: feat: enhance GameVersion struct with optional fields for better mod loader support --- src-tauri/src/core/game_version.rs | 46 +++++++++++++++++++++++++------------- 1 file changed, 30 insertions(+), 16 deletions(-) (limited to 'src-tauri/src/core/game_version.rs') diff --git a/src-tauri/src/core/game_version.rs b/src-tauri/src/core/game_version.rs index 31477a9..c62e232 100644 --- a/src-tauri/src/core/game_version.rs +++ b/src-tauri/src/core/game_version.rs @@ -1,11 +1,15 @@ -use serde::Deserialize; +use serde::{Deserialize, Serialize}; -#[derive(Debug, Deserialize)] +/// Represents a Minecraft version JSON, supporting both vanilla and modded (Fabric/Forge) formats. +/// Modded versions use `inheritsFrom` to reference a parent vanilla version. +#[derive(Debug, Deserialize, Serialize, Clone)] pub struct GameVersion { pub id: String, - pub downloads: Downloads, + /// Optional for mod loaders that inherit from vanilla + pub downloads: Option, + /// Optional for mod loaders that inherit from vanilla #[serde(rename = "assetIndex")] - pub asset_index: AssetIndex, + pub asset_index: Option, pub libraries: Vec, #[serde(rename = "mainClass")] pub main_class: String, @@ -14,67 +18,77 @@ pub struct GameVersion { pub arguments: Option, #[serde(rename = "javaVersion")] pub java_version: Option, + /// For mod loaders: the vanilla version this inherits from + #[serde(rename = "inheritsFrom")] + pub inherits_from: Option, + /// Fabric/Forge may specify a custom assets version + pub assets: Option, + /// Release type (release, snapshot, old_beta, etc.) + #[serde(rename = "type")] + pub version_type: Option, } -#[derive(Debug, Deserialize)] +#[derive(Debug, Deserialize, Serialize, Clone)] pub struct Downloads { pub client: DownloadArtifact, pub server: Option, } -#[derive(Debug, Deserialize, Clone)] +#[derive(Debug, Deserialize, Serialize, Clone)] pub struct DownloadArtifact { - pub sha1: String, - pub size: u64, + pub sha1: Option, + pub size: Option, pub url: String, pub path: Option, } -#[derive(Debug, Deserialize)] +#[derive(Debug, Deserialize, Serialize, Clone)] pub struct AssetIndex { pub id: String, pub sha1: String, pub size: u64, pub url: String, #[serde(rename = "totalSize")] - pub total_size: u64, + pub total_size: Option, } -#[derive(Debug, Deserialize)] +#[derive(Debug, Deserialize, Serialize, Clone)] pub struct Library { pub downloads: Option, pub name: String, pub rules: Option>, pub natives: Option, + /// Maven repository URL for mod loader libraries + pub url: Option, } -#[derive(Debug, Deserialize)] +#[derive(Debug, Deserialize, Serialize, Clone)] pub struct Rule { pub action: String, // "allow" or "disallow" pub os: Option, pub features: Option, // Feature-based rules (e.g., is_demo_user, has_quick_plays_support) } -#[derive(Debug, Deserialize)] +#[derive(Debug, Deserialize, Serialize, Clone)] pub struct OsRule { pub name: Option, // "linux", "osx", "windows" pub version: Option, // Regex pub arch: Option, // "x86" } -#[derive(Debug, Deserialize)] +#[derive(Debug, Deserialize, Serialize, Clone)] pub struct LibraryDownloads { pub artifact: Option, pub classifiers: Option, // Complex, simplifying for now } -#[derive(Debug, Deserialize)] +#[derive(Debug, Deserialize, Serialize, Clone)] pub struct Arguments { pub game: Option, pub jvm: Option, } -#[derive(Debug, Deserialize)] +#[derive(Debug, Deserialize, Serialize, Clone)] pub struct JavaVersion { pub component: String, #[serde(rename = "majorVersion")] -- cgit v1.2.3-70-g09d2