Skip to content

Commit 68f0955

Browse files
committed
Updated packages and frameworks, added DirectJoinServer option
1 parent 919f025 commit 68f0955

7 files changed

Lines changed: 46 additions & 89 deletions

File tree

ModuleLauncher.NET.Runtime/LauncherChecker.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ public class LauncherChecker
1010
public static async Task CheckAsync(string? defaultVersion = null, string? defaultWorkingDirectory = null)
1111
{
1212
var resolver = new MinecraftResolver(@"C:\Users\ahpx\AppData\Roaming\.minecraft");
13-
var launcher = new Launcher(resolver, new LauncherConfig
13+
var launcher = new Launcher.Launcher(resolver, new LauncherConfig
1414
{
1515
Authentication = "ahpx",
1616
Fullscreen = false,

ModuleLauncher.NET.Runtime/ModuleLauncher.NET.Runtime.csproj

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010

1111
<ItemGroup>
1212
<PackageReference Include="Downloader" Version="2.3.5" />
13-
<PackageReference Include="Flurl.Http" Version="4.0.0-pre2" />
1413
<PackageReference Include="morelinq" Version="3.3.2" />
1514
<PackageReference Include="Newtonsoft.Json" Version="13.0.2-beta1" />
1615
<PackageReference Include="Polly" Version="7.2.3" />

ModuleLauncher.NET.Runtime/Program.cs

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,20 +3,24 @@
33
using ModuleLauncher.NET.Resources;
44
using ModuleLauncher.NET.Utilities;
55
using System.Runtime.CompilerServices;
6+
using Manganese.Process;
67
using Tommy;
78

89
const string MinecraftRoot = @"C:\Users\ahpx\AppData\Roaming\.minecraft";
910
var resolver = new MinecraftResolver(MinecraftRoot);
1011

11-
var mc = resolver.GetMinecraft("1.20.4");
12+
var mc = resolver.GetMinecraft("fabric-loader-0.15.11-1.21");
1213

13-
await mc.WithAuthentication("AHpx")
14-
.WithJava(@"C:\Users\ahpx\AppData\Local\Packages\Microsoft.4297127D64EC6_8wekyb3d8bbwe\LocalCache\Local\runtime\java-runtime-gamma\windows-x64\java-runtime-gamma\bin\javaw.exe")
14+
var process = await mc.WithAuthentication("AHpx")
15+
.WithJava(@"C:\Program Files\Eclipse Adoptium\jre-21.0.3.9-hotspot\bin\javaw.exe")
1516
.WithLauncherName("Latest Version")
16-
.LaunchAsync(pipeTarget: CliWrap.PipeTarget.ToDelegate(s =>
17-
{
18-
Console.WriteLine(s);
19-
}));
17+
.WithDirectServer("hypixel.net")
18+
.LaunchAsync();
19+
20+
while (!process.HasExited)
21+
{
22+
process.ReadOutputLine().Print();
23+
}
2024

2125
static class RuntimeUtils
2226
{
Lines changed: 14 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,4 @@
11
using System.Diagnostics;
2-
using CliWrap;
3-
using CliWrap.Buffered;
42
using Manganese.Data;
53
using Manganese.IO;
64
using Manganese.Text;
@@ -11,7 +9,7 @@
119
using ModuleLauncher.NET.Utilities;
1210
using Newtonsoft.Json.Linq;
1311

14-
namespace ModuleLauncher.NET;
12+
namespace ModuleLauncher.NET.Launcher;
1513

1614
public class Launcher
1715
{
@@ -67,49 +65,15 @@ public async Task<Process> LaunchAsync(string id)
6765

6866
return await LaunchAsync(minecraftEntry);
6967
}
70-
71-
/// <summary>
72-
/// Launch minecraft
73-
/// </summary>
74-
/// <param name="minecraftEntry"></param>
75-
/// <param name="pipeTarget">How do you want to grab your output lines. No idea how to use it? Simply pass a null is allowed</param>
76-
/// <returns></returns>
77-
public async Task<CommandResult> LaunchAsync(MinecraftEntry minecraftEntry, PipeTarget? pipeTarget)
78-
{
79-
#region Precheck
80-
81-
await WriteLauncherProfileAsync(minecraftEntry);
82-
83-
#endregion
84-
85-
var java = GetJava(minecraftEntry)?.Executable
86-
.ThrowIfNull(new InvalidJavaExecutableException("No java executable file was specified"));
87-
88-
var arguments = GetLaunchArguments(minecraftEntry);
89-
var result = await Cli.Wrap(java
90-
.ThrowIfNull(new InvalidJavaExecutableException("No java executable file was specified"))
91-
.FullName)
92-
.WithArguments(arguments)
93-
.WithWorkingDirectory(minecraftEntry.Tree.WorkingDirectory.FullName)
94-
.WithValidation(CommandResultValidation.None)
95-
.WithStandardOutputPipe(pipeTarget ?? PipeTarget.Null)
96-
.ExecuteAsync();
97-
98-
await minecraftEntry.ExtractNativesAsync();
99-
await minecraftEntry.MapAssetsAsync();
10068

101-
return result;
102-
}
103-
104-
[Obsolete("This method will be soon abandoned")]
10569
public async Task<Process> LaunchAsync(MinecraftEntry minecraftEntry)
10670
{
10771
#region Precheck
10872

10973
await WriteLauncherProfileAsync(minecraftEntry);
110-
74+
11175
#endregion
112-
76+
11377
var java = GetJava(minecraftEntry)?.Executable
11478
.ThrowIfNull(new InvalidJavaExecutableException("No java executable file was specified"));
11579

@@ -134,12 +98,12 @@ public async Task<Process> LaunchAsync(MinecraftEntry minecraftEntry)
13498
await minecraftEntry.MapAssetsAsync();
13599

136100
process.Start();
137-
101+
138102
return process;
139103
}
140104

141-
142-
105+
106+
143107
public string GetLaunchArguments(MinecraftEntry minecraftEntry)
144108
{
145109
var preset = GetJvmArguments(minecraftEntry);
@@ -204,7 +168,7 @@ private string GetMinecraftArguments(MinecraftEntry minecraftEntry)
204168
var options = new List<string>();
205169

206170
var boilerplate = GetMinecraftArgumentBoilerplate(minecraftEntry);
207-
171+
208172
//filling the boilerplate
209173
boilerplate = boilerplate.Replace("${auth_player_name}", $"\"{LauncherConfig.Authentication.Name}\"")
210174
.Replace("${version_name}", $"\"{LauncherConfig.LauncherName}\"")
@@ -231,6 +195,9 @@ private string GetMinecraftArguments(MinecraftEntry minecraftEntry)
231195
if (LauncherConfig.WindowWidth != null)
232196
options.Add($"--width {LauncherConfig.WindowWidth}");
233197

198+
if (LauncherConfig.DirectlyJoinServer != null)
199+
options.Add($"--server {LauncherConfig.DirectlyJoinServer}");
200+
234201
return options.JoinToString(" ");
235202
}
236203

@@ -261,11 +228,11 @@ private string GetMinecraftArgumentBoilerplate(MinecraftEntry minecraftEntry)
261228

262229
return boilerplate;
263230
}
264-
231+
265232
private string GetJvmArguments(MinecraftEntry minecraftEntry)
266233
{
267234
var libraries = minecraftEntry.GetLibraries();
268-
235+
269236
var rawArgs = new List<string>
270237
{
271238
// "-XX:HeapDumpPath=MojangTricksIntelDriversForPerformance_javaw.exe_minecraft.exe.heapdump",
@@ -277,7 +244,7 @@ private string GetJvmArguments(MinecraftEntry minecraftEntry)
277244
"-XX:G1HeapRegionSize=32M",
278245
$"-Xmx{LauncherConfig.MaxMemorySize}M"
279246
};
280-
247+
281248
if (LauncherConfig.MinMemorySize != null)
282249
rawArgs.Add($"-Xmn{LauncherConfig.MinMemorySize}M");
283250

@@ -302,7 +269,7 @@ private string GetJvmArguments(MinecraftEntry minecraftEntry)
302269

303270
rawArgs.Add(forgeArgs.JoinToString(" "));
304271
}
305-
272+
306273
var args = rawArgs.JoinToString(" ");
307274

308275
return args;

ModuleLauncher.NET/Models/Launcher/LauncherConfig.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,11 @@ public class LauncherConfig
2727
/// </summary>
2828
public int? MinMemorySize { get; set; }
2929

30+
/// <summary>
31+
/// The example pattern(server:port): 127.0.0.1:8080. Invalid pattern will occur an error.
32+
/// </summary>
33+
public string? DirectlyJoinServer { get; set; }
34+
3035
/// <summary>
3136
/// AuthenticateResult object, could be implicitly convert via string
3237
/// </summary>

ModuleLauncher.NET/ModuleLauncher.NET.csproj

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,10 @@
66
<Nullable>enable</Nullable>
77
<LangVersion>latestmajor</LangVersion>
88
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
9-
<PackageVersion>4.0.8</PackageVersion>
9+
<PackageVersion>4.0.9</PackageVersion>
1010
<Title>ModuleLauncher.NET</Title>
1111
<Description>Your on-the-fly Minecraft launcher core.</Description>
12-
<Copyright>Copyright 2023 AHpx all rights reserved.</Copyright>
12+
<Copyright>Copyright 2024 AHpx all rights reserved.</Copyright>
1313
<PackageProjectUrl>https://github.com/SinoAHpx/ModuleLauncher.Re</PackageProjectUrl>
1414
<PackageIcon>ML-logo.png</PackageIcon>
1515
<RepositoryUrl>https://github.com/SinoAHpx/ModuleLauncher.Re</RepositoryUrl>
@@ -20,9 +20,8 @@
2020
</PropertyGroup>
2121

2222
<ItemGroup>
23-
<PackageReference Include="CliWrap" Version="3.6.0" />
24-
<PackageReference Include="Flurl.Http" Version="4.0.0-pre2" />
25-
<PackageReference Include="Manganese" Version="1.2.8" />
23+
<PackageReference Include="Flurl.Http" Version="4.0.2" />
24+
<PackageReference Include="Manganese" Version="1.2.9" />
2625
<AssemblyAttribute Include="System.Runtime.CompilerServices.InternalsVisibleTo">
2726
<_Parameter1>$(MSBuildProjectName).Tests</_Parameter1>
2827
</AssemblyAttribute>

ModuleLauncher.NET/Utilities/LauncherUtils.cs

Lines changed: 11 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
using System.Diagnostics;
2-
using CliWrap;
32
using Manganese.Text;
43
using ModuleLauncher.NET.Models.Authentication;
54
using ModuleLauncher.NET.Models.Launcher;
@@ -415,51 +414,35 @@ public static LauncherConfigBuilder WithJavas(this LauncherConfigBuilder builder
415414
return builder;
416415
}
417416

418-
public static Launcher? Launcher;
419-
420-
/// <summary>
421-
/// Launch minecraft from internal config, should be the last item of the method chain
422-
/// </summary>
423-
/// <param name="minecraftEntry"></param>
424-
/// <param name="config"></param>
425-
/// <returns></returns>
426-
[Obsolete("This method will be soon abandoned")]
427-
public static async Task<Process> LaunchAsync(this MinecraftEntry minecraftEntry, LauncherConfig config)
417+
public static LauncherConfigBuilder WithDirectServer(this LauncherConfigBuilder builder, string? server)
428418
{
429-
Launcher = new Launcher
419+
if (server is not null)
430420
{
431-
MinecraftResolver = MinecraftResolver.Of(minecraftEntry),
432-
LauncherConfig = config
433-
};
421+
builder.LauncherConfig.DirectlyJoinServer = server;
422+
}
434423

435-
return await Launcher.LaunchAsync(minecraftEntry);
424+
return builder;
436425
}
426+
427+
public static Launcher.Launcher? Launcher;
437428

438429
/// <summary>
439430
/// Launch minecraft from internal config, should be the last item of the method chain
440431
/// </summary>
441432
/// <param name="minecraftEntry"></param>
442433
/// <param name="config"></param>
443434
/// <returns></returns>
444-
//todo: make the parameter optional
445-
public static async Task<CommandResult> LaunchAsync(this MinecraftEntry minecraftEntry, LauncherConfig config, PipeTarget? pipeTarget)
435+
public static async Task<Process> LaunchAsync(this MinecraftEntry minecraftEntry, LauncherConfig config)
446436
{
447-
Launcher = new Launcher
437+
Launcher = new Launcher.Launcher
448438
{
449439
MinecraftResolver = MinecraftResolver.Of(minecraftEntry),
450440
LauncherConfig = config
451441
};
452442

453-
return await Launcher.LaunchAsync(minecraftEntry, pipeTarget);
454-
}
455-
456-
//todo: make the parameter optional
457-
public static async Task<CommandResult> LaunchAsync(this LauncherConfigBuilder builder, PipeTarget? pipeTarget)
458-
{
459-
return await builder.MinecraftEntry.LaunchAsync(builder.LauncherConfig, pipeTarget);
443+
return await Launcher.LaunchAsync(minecraftEntry);
460444
}
461-
462-
[Obsolete("This method will be soon abandoned")]
445+
463446
public static async Task<Process> LaunchAsync(this LauncherConfigBuilder builder)
464447
{
465448
return await builder.MinecraftEntry.LaunchAsync(builder.LauncherConfig);

0 commit comments

Comments
 (0)