File tree 2 files changed +67
-0
lines changed
crates/nomi-core/src/loaders
2 files changed +67
-0
lines changed Original file line number Diff line number Diff line change
1
+ use std:: fmt:: Debug ;
2
+
3
+ use anyhow:: anyhow;
4
+ use itertools:: Itertools ;
5
+
6
+ const FORGE_REPO_URL : & str = "https://maven.minecraftforge.net" ;
7
+ const FORGE_GROUP : & str = "net.minecraftforge" ;
8
+ const FORGE_ARTIFACT : & str = "forge" ;
9
+
10
+ const NEO_FORGE_REPO_URL : & str = "https://maven.neoforged.net/releases/" ;
11
+ const NEO_FORGE_GROUP : & str = "net.neoforged" ;
12
+ const NEO_FORGE_ARTIFACT : & str = "neoforge" ;
13
+
14
+ pub struct Forge {
15
+ url : String ,
16
+ }
17
+
18
+ impl Forge {
19
+ #[ tracing:: instrument( skip_all, err) ]
20
+ pub async fn get_versions ( game_version : impl Into < String > ) -> anyhow:: Result < Vec < String > > {
21
+ let game_version = game_version. into ( ) ;
22
+
23
+ let raw = reqwest:: get ( format ! ( "{FORGE_REPO_URL}/net/minecraftforge/forge/maven-metadata.xml" ) )
24
+ . await ?
25
+ . text ( )
26
+ . await ?;
27
+
28
+ let versions = raw
29
+ . find ( "<version>" )
30
+ . and_then ( |s| raw. find ( "</versions>" ) . map ( |e| ( s, e) ) )
31
+ . map ( |( s, e) | & raw [ s..e] )
32
+ . map ( |s| {
33
+ s. split ( "<version>" )
34
+ . filter_map ( |s| {
35
+ s. split ( "</version>" )
36
+ . collect :: < String > ( )
37
+ . split ( '-' )
38
+ . map ( String :: from)
39
+ . collect_tuple :: < ( String , String ) > ( )
40
+ } )
41
+ . filter ( |( g, _) | g == & game_version)
42
+ . map ( |( _, f) | f)
43
+ . collect :: < Vec < _ > > ( )
44
+ } ) ;
45
+
46
+ match versions {
47
+ Some ( v) => Ok ( v) ,
48
+ None => Err ( anyhow ! ( "Error while matching forge versions" ) ) ,
49
+ }
50
+ }
51
+
52
+ pub fn new ( version : impl Into < String > , forge_version : Option < impl Into < String > > ) -> Self {
53
+ todo ! ( )
54
+ }
55
+ }
56
+
57
+ #[ cfg( test) ]
58
+ mod tests {
59
+ use super :: * ;
60
+
61
+ #[ tokio:: test]
62
+ async fn get_versions_test ( ) {
63
+ let versions = Forge :: get_versions ( "1.19.2" ) . await . unwrap ( ) ;
64
+ println ! ( "{versions:#?}" ) ;
65
+ }
66
+ }
Original file line number Diff line number Diff line change 1
1
pub mod fabric;
2
+ pub mod forge;
2
3
pub mod vanilla;
You can’t perform that action at this time.
0 commit comments