1
- using CmlLib . Core . Downloader ;
2
- using CmlLib . Core . Installer . Forge . Versions ;
1
+ using CmlLib . Core . Installer . Forge . Versions ;
2
+ using CmlLib . Core . Installers ;
3
3
using CmlLib . Core . Version ;
4
- using System . ComponentModel ;
5
4
using System . Diagnostics ;
6
5
7
6
namespace CmlLib . Core . Installer . Forge ;
8
7
9
- public class MForge
8
+ public class ForgeInstaller
10
9
{
11
10
public static readonly string ForgeAdUrl =
12
11
"https://adfoc.us/serve/sitelinks/?id=271228&url=https://maven.minecraftforge.net/" ;
13
12
14
- private readonly CMLauncher _launcher ;
13
+ private readonly MinecraftLauncher _launcher ;
15
14
private readonly IForgeInstallerVersionMapper _installerMapper ;
16
15
private readonly ForgeVersionLoader _versionLoader ;
17
16
18
- public event DownloadFileChangedHandler ? FileChanged ;
19
- public event EventHandler < ProgressChangedEventArgs > ? ProgressChanged ;
20
- public event EventHandler < string > ? InstallerOutput ;
21
-
22
- public MForge ( CMLauncher launcher )
17
+ public ForgeInstaller ( MinecraftLauncher launcher )
23
18
{
24
- _launcher = launcher ;
25
19
_installerMapper = new ForgeInstallerVersionMapper ( ) ;
26
20
_versionLoader = new ForgeVersionLoader ( new HttpClient ( ) ) ;
21
+ _launcher = launcher ;
27
22
}
28
23
29
- private ForgeInstallOptions createDefaultOptions ( )
30
- {
31
- return new ForgeInstallOptions ( _launcher . MinecraftPath )
32
- {
33
- Downloader = new SequenceDownloader ( )
34
- } ;
35
- }
36
-
37
- public Task < string > Install ( string mcVersion , bool forceUpdate = false ) =>
38
- Install ( mcVersion , createDefaultOptions ( ) , forceUpdate ) ;
24
+ public Task < string > Install ( string mcVersion ) =>
25
+ Install ( mcVersion , new ForgeInstallOptions ( ) ) ;
39
26
40
27
public async Task < string > Install (
41
28
string mcVersion ,
42
- ForgeInstallOptions options ,
43
- bool forceUpdate = false )
29
+ ForgeInstallOptions options )
44
30
{
45
31
var versions = await _versionLoader . GetForgeVersions ( mcVersion ) ;
46
32
var bestVersion =
@@ -49,53 +35,53 @@ public async Task<string> Install(
49
35
versions . FirstOrDefault ( ) ??
50
36
throw new InvalidOperationException ( "Cannot find any version" ) ;
51
37
52
- return await Install ( bestVersion , options , forceUpdate ) ;
38
+ return await Install ( bestVersion , options ) ;
53
39
}
54
40
55
- public Task < string > Install ( string mcVersion , string forgeVersion , bool forceUpdate = false ) =>
56
- Install ( mcVersion , forgeVersion , createDefaultOptions ( ) , forceUpdate ) ;
41
+ public Task < string > Install ( string mcVersion , string forgeVersion ) =>
42
+ Install ( mcVersion , forgeVersion , new ForgeInstallOptions ( ) ) ;
57
43
58
44
public async Task < string > Install (
59
45
string mcVersion ,
60
46
string forgeVersion ,
61
- ForgeInstallOptions options ,
62
- bool forceUpdate = false )
47
+ ForgeInstallOptions options )
63
48
{
64
49
var versions = await _versionLoader . GetForgeVersions ( mcVersion ) ;
65
50
66
51
var foundVersion = versions . FirstOrDefault ( v => v . ForgeVersionName == forgeVersion ) ??
67
52
throw new InvalidOperationException ( "Cannot find version name " + forgeVersion ) ;
68
- return await Install ( foundVersion , options , forceUpdate ) ;
53
+ return await Install ( foundVersion , options ) ;
69
54
}
70
55
71
56
public async Task < string > Install (
72
57
ForgeVersion forgeVersion ,
73
- ForgeInstallOptions options ,
74
- bool forceUpdate )
58
+ ForgeInstallOptions options )
75
59
{
76
60
var installer = _installerMapper . CreateInstaller ( forgeVersion ) ;
77
-
78
- if ( await checkVersionInstalled ( installer . VersionName ) && ! forceUpdate )
61
+ if ( options . SkipIfAlreadyInstalled && await checkVersionInstalled ( installer . VersionName ) )
79
62
return installer . VersionName ;
80
63
81
- var version = await checkAndDownloadVanillaVersion ( forgeVersion . MinecraftVersionName ) ;
64
+ var version = await checkAndDownloadVanillaVersion (
65
+ forgeVersion . MinecraftVersionName ,
66
+ options . FileProgress ,
67
+ options . ByteProgress ) ;
68
+
82
69
if ( string . IsNullOrEmpty ( options . JavaPath ) )
83
70
options . JavaPath = getJavaPath ( version ) ;
84
71
85
- installer . FileChanged += e => FileChanged ? . Invoke ( e ) ;
86
- installer . ProgressChanged += ( s , e ) => ProgressChanged ? . Invoke ( this , e ) ;
87
- installer . InstallerOutput += ( s , e ) => InstallerOutput ? . Invoke ( this , e ) ;
88
- await installer . Install ( options ) ;
89
-
72
+ await installer . Install ( _launcher . MinecraftPath , _launcher . GameInstaller , options ) ;
90
73
showAd ( ) ;
91
74
await _launcher . GetAllVersionsAsync ( ) ;
92
75
return installer . VersionName ;
93
76
}
94
77
95
- private async Task < MVersion > checkAndDownloadVanillaVersion ( string mcVersion )
78
+ private async Task < IVersion > checkAndDownloadVanillaVersion (
79
+ string mcVersion ,
80
+ IProgress < InstallerProgressChangedEventArgs > ? fileProgress ,
81
+ IProgress < ByteProgress > ? byteProgress )
96
82
{
97
83
var version = await _launcher . GetVersionAsync ( mcVersion ) ;
98
- await _launcher . CheckAndDownloadAsync ( version ) ;
84
+ await _launcher . InstallAsync ( version , fileProgress , byteProgress ) ;
99
85
return version ;
100
86
}
101
87
@@ -112,7 +98,7 @@ private async Task<bool> checkVersionInstalled(string versionName)
112
98
}
113
99
}
114
100
115
- private string getJavaPath ( MVersion version )
101
+ private string getJavaPath ( IVersion version )
116
102
{
117
103
var javaPath = _launcher . GetJavaPath ( version ) ;
118
104
if ( string . IsNullOrEmpty ( javaPath ) || ! File . Exists ( javaPath ) )
0 commit comments