aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/src-tauri
diff options
context:
space:
mode:
authorHsiangNianian <i@jyunko.cn>2026-01-14 16:37:51 +0800
committerHsiangNianian <i@jyunko.cn>2026-01-14 16:38:35 +0800
commitcba180b0d625b26bcf810dec3c5b6d24ff5b1568 (patch)
treee7c63e371badf2dbd8ba89c40e935afefe906794 /src-tauri
parent07dbe52f9ecffae0698e0ab8a0704a8669b0fece (diff)
downloadDropOut-cba180b0d625b26bcf810dec3c5b6d24ff5b1568.tar.gz
DropOut-cba180b0d625b26bcf810dec3c5b6d24ff5b1568.zip
feat: enhance GameVersion struct with optional fields for better mod loader support
Diffstat (limited to 'src-tauri')
-rw-r--r--src-tauri/src/core/game_version.rs46
1 files changed, 30 insertions, 16 deletions
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<Downloads>,
+ /// Optional for mod loaders that inherit from vanilla
#[serde(rename = "assetIndex")]
- pub asset_index: AssetIndex,
+ pub asset_index: Option<AssetIndex>,
pub libraries: Vec<Library>,
#[serde(rename = "mainClass")]
pub main_class: String,
@@ -14,67 +18,77 @@ pub struct GameVersion {
pub arguments: Option<Arguments>,
#[serde(rename = "javaVersion")]
pub java_version: Option<JavaVersion>,
+ /// For mod loaders: the vanilla version this inherits from
+ #[serde(rename = "inheritsFrom")]
+ pub inherits_from: Option<String>,
+ /// Fabric/Forge may specify a custom assets version
+ pub assets: Option<String>,
+ /// Release type (release, snapshot, old_beta, etc.)
+ #[serde(rename = "type")]
+ pub version_type: Option<String>,
}
-#[derive(Debug, Deserialize)]
+#[derive(Debug, Deserialize, Serialize, Clone)]
pub struct Downloads {
pub client: DownloadArtifact,
pub server: Option<DownloadArtifact>,
}
-#[derive(Debug, Deserialize, Clone)]
+#[derive(Debug, Deserialize, Serialize, Clone)]
pub struct DownloadArtifact {
- pub sha1: String,
- pub size: u64,
+ pub sha1: Option<String>,
+ pub size: Option<u64>,
pub url: String,
pub path: Option<String>,
}
-#[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<u64>,
}
-#[derive(Debug, Deserialize)]
+#[derive(Debug, Deserialize, Serialize, Clone)]
pub struct Library {
pub downloads: Option<LibraryDownloads>,
pub name: String,
pub rules: Option<Vec<Rule>>,
pub natives: Option<serde_json::Value>,
+ /// Maven repository URL for mod loader libraries
+ pub url: Option<String>,
}
-#[derive(Debug, Deserialize)]
+#[derive(Debug, Deserialize, Serialize, Clone)]
pub struct Rule {
pub action: String, // "allow" or "disallow"
pub os: Option<OsRule>,
pub features: Option<serde_json::Value>, // 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<String>, // "linux", "osx", "windows"
pub version: Option<String>, // Regex
pub arch: Option<String>, // "x86"
}
-#[derive(Debug, Deserialize)]
+#[derive(Debug, Deserialize, Serialize, Clone)]
pub struct LibraryDownloads {
pub artifact: Option<DownloadArtifact>,
pub classifiers: Option<serde_json::Value>, // Complex, simplifying for now
}
-#[derive(Debug, Deserialize)]
+#[derive(Debug, Deserialize, Serialize, Clone)]
pub struct Arguments {
pub game: Option<serde_json::Value>,
pub jvm: Option<serde_json::Value>,
}
-#[derive(Debug, Deserialize)]
+#[derive(Debug, Deserialize, Serialize, Clone)]
pub struct JavaVersion {
pub component: String,
#[serde(rename = "majorVersion")]