@@ -16,37 +16,22 @@ use crate::{
16
16
17
17
use super :: { copy_dotminecraft, recache_icon} ;
18
18
19
- #[ derive( Serialize , Deserialize ) ]
20
- #[ serde( rename_all = "camelCase" ) ]
21
- pub struct FlameManifest {
22
- pub manifest_version : u8 ,
23
- pub name : String ,
24
- pub minecraft : FlameMinecraft ,
25
- }
26
- #[ derive( Serialize , Deserialize ) ]
27
- #[ serde( rename_all = "camelCase" ) ]
28
- pub struct FlameMinecraft {
29
- pub version : String ,
30
- pub mod_loaders : Vec < FlameModLoader > ,
31
- }
32
- #[ derive( Serialize , Deserialize ) ]
33
- #[ serde( rename_all = "camelCase" ) ]
34
- pub struct FlameModLoader {
35
- pub id : String ,
36
- pub primary : bool ,
37
- }
38
-
39
19
#[ derive( Serialize , Deserialize , Debug ) ]
40
20
#[ serde( rename_all = "camelCase" ) ]
41
21
pub struct MinecraftInstance {
42
22
pub name : Option < String > ,
23
+ pub base_mod_loader : Option < MinecraftInstanceModLoader > ,
43
24
pub profile_image_path : Option < PathBuf > ,
44
25
pub installed_modpack : Option < InstalledModpack > ,
45
26
pub game_version : String , // Minecraft game version. Non-prioritized, use this if Vanilla
46
27
}
47
28
#[ derive( Serialize , Deserialize , Debug , Clone ) ]
48
29
#[ serde( rename_all = "camelCase" ) ]
49
-
30
+ pub struct MinecraftInstanceModLoader {
31
+ pub name : String ,
32
+ }
33
+ #[ derive( Serialize , Deserialize , Debug , Clone ) ]
34
+ #[ serde( rename_all = "camelCase" ) ]
50
35
pub struct InstalledModpack {
51
36
pub thumbnail_url : Option < String > ,
52
37
}
@@ -113,35 +98,26 @@ pub async fn import_curseforge(
113
98
}
114
99
}
115
100
116
- // Curseforge vanilla profile may not have a manifest.json, so we allow it to not exist
117
- if curseforge_instance_folder. join ( "manifest.json" ) . exists ( ) {
118
- // Load manifest.json
119
- let cf_manifest: String = io:: read_to_string (
120
- & curseforge_instance_folder. join ( "manifest.json" ) ,
121
- )
122
- . await ?;
123
-
124
- let cf_manifest: FlameManifest =
125
- serde_json:: from_str :: < FlameManifest > ( & cf_manifest) ?;
126
-
127
- let game_version = cf_manifest. minecraft . version ;
101
+ // base mod loader is always None for vanilla
102
+ if let Some ( instance_mod_loader) = minecraft_instance. base_mod_loader {
103
+ let game_version = minecraft_instance. game_version ;
128
104
129
105
// CF allows Forge, Fabric, and Vanilla
130
106
let mut mod_loader = None ;
131
107
let mut loader_version = None ;
132
- for loader in cf_manifest. minecraft . mod_loaders {
133
- match loader. id . split_once ( '-' ) {
134
- Some ( ( "forge" , version) ) => {
135
- mod_loader = Some ( ModLoader :: Forge ) ;
136
- loader_version = Some ( version. to_string ( ) ) ;
137
- }
138
- Some ( ( "fabric" , version) ) => {
139
- mod_loader = Some ( ModLoader :: Fabric ) ;
140
- loader_version = Some ( version. to_string ( ) ) ;
141
- }
142
- _ => { }
108
+
109
+ match instance_mod_loader. name . split ( '-' ) . collect :: < Vec < & str > > ( ) [ ..] {
110
+ [ "forge" , version] => {
111
+ mod_loader = Some ( ModLoader :: Forge ) ;
112
+ loader_version = Some ( version. to_string ( ) ) ;
143
113
}
114
+ [ "fabric" , version, _game_version] => {
115
+ mod_loader = Some ( ModLoader :: Fabric ) ;
116
+ loader_version = Some ( version. to_string ( ) ) ;
117
+ }
118
+ _ => { }
144
119
}
120
+
145
121
let mod_loader = mod_loader. unwrap_or ( ModLoader :: Vanilla ) ;
146
122
147
123
let loader_version = if mod_loader != ModLoader :: Vanilla {
@@ -170,7 +146,7 @@ pub async fn import_curseforge(
170
146
} )
171
147
. await ?;
172
148
} else {
173
- // If no manifest is found, it's a vanilla profile
149
+ // create a vanilla profile
174
150
crate :: api:: profile:: edit ( & profile_path, |prof| {
175
151
prof. metadata . name = override_title
176
152
. clone ( )
0 commit comments