Table of Contents

Class ModLoaderService

Namespace
McServerLauncher.Services
Assembly
McServerLauncher.dll
public class ModLoaderService
Inheritance
ModLoaderService
Inherited Members

Methods

DownloadFabricServerAsync(string, string, string, IProgress<string>?, CancellationToken)

Downloads the Fabric server launcher jar. KNOWN LIMITATION: unlike Mojang/Paper/Adoptium/ Modrinth, Fabric's meta endpoint publishes no checksum for this artifact, so a true integrity check isn't possible without changing the source; TLS is the only transport protection. As a structural safety net the downloaded jar is opened and required to carry the install.properties every Fabric server launcher embeds, with exactly the game/loader versions that were requested — a corrupted or swapped file is deleted and rejected instead of being executed later.

public Task DownloadFabricServerAsync(string gameVersion, string loaderVersion, string destPath, IProgress<string>? log, CancellationToken ct = default)

Parameters

gameVersion string
loaderVersion string
destPath string
log IProgress<string>
ct CancellationToken

Returns

Task

GetLatestFabricLoaderVersionAsync(CancellationToken)

public Task<string> GetLatestFabricLoaderVersionAsync(CancellationToken ct = default)

Parameters

ct CancellationToken

Returns

Task<string>

GetNeoForgeVersionAsync(string, CancellationToken)

The NeoForge build to install for a Minecraft version, or null when there is none.

public Task<NeoForgeVersions.Choice?> GetNeoForgeVersionAsync(string mcVersion, CancellationToken ct = default)

Parameters

mcVersion string
ct CancellationToken

Returns

Task<NeoForgeVersions.Choice>

Remarks

NeoForge publishes no equivalent of Forge's promotions feed — just one flat list of every build, with the Minecraft version encoded inside the build number. The choosing is done by NeoForgeVersions, which is pure and tested; this only fetches the list.

GetRecommendedForgeVersionAsync(string, CancellationToken)

Recommended (or latest) Forge version for a Minecraft version, from Forge's promotions feed. Returns null if there is no Forge build for that version.

public Task<string?> GetRecommendedForgeVersionAsync(string mcVersion, CancellationToken ct = default)

Parameters

mcVersion string
ct CancellationToken

Returns

Task<string>

InstallForgeServerAsync(string, string, string, string, IProgress<string>?, CancellationToken)

Downloads the Forge installer and runs it with --installServer in folder. Detects the launch method: modern Forge (1.17+) yields an args file (returns its id), older Forge yields a runnable forge-*.jar (returns its file name).

public Task<ModLoaderService.ForgeInstallResult> InstallForgeServerAsync(string folder, string mcVersion, string forgeVersion, string javaPath, IProgress<string>? log, CancellationToken ct = default)

Parameters

folder string
mcVersion string
forgeVersion string
javaPath string
log IProgress<string>
ct CancellationToken

Returns

Task<ModLoaderService.ForgeInstallResult>

InstallNeoForgeServerAsync(string, string, string, IProgress<string>?, CancellationToken)

Downloads the NeoForge installer and runs it with --installServer.

public Task<ModLoaderService.ForgeInstallResult> InstallNeoForgeServerAsync(string folder, string neoForgeVersion, string javaPath, IProgress<string>? log, CancellationToken ct = default)

Parameters

folder string
neoForgeVersion string
javaPath string
log IProgress<string>
ct CancellationToken

Returns

Task<ModLoaderService.ForgeInstallResult>

Remarks

The same shape as the Forge path, with one difference worth having: NeoForge's maven publishes a .sha256 beside each artifact, so this verifies with SHA-256 rather than the SHA-1 that is all Forge offers. The trust assumption is otherwise identical — the hash comes from the same server as the jar, so it protects against a corrupted download, not against a compromised maven — and, as there, a missing hash means no install at all, because what follows is java -jar.

ValidateFabricServerJar(string, string, string)

Structural validation of a downloaded Fabric server jar (see DownloadFabricServerAsync(string, string, string, IProgress<string>?, CancellationToken)): it must be a readable jar whose install.properties matches the requested game and loader versions. On failure the file is deleted (so a bad download can't linger and get executed) and an exception is thrown.

public static void ValidateFabricServerJar(string jarPath, string expectedGameVersion, string expectedLoaderVersion)

Parameters

jarPath string
expectedGameVersion string
expectedLoaderVersion string

ValidateForgeInstallerJar(string)

Structural validation of a downloaded Forge installer before it is executed: it must be a readable jar that actually looks like a Forge installer — carrying the install_profile.json every Forge installer embeds, or (fallback for exotic/legacy layouts) a manifest whose Main-Class names the installer. On failure the file is deleted and an exception is thrown, so a swapped or truncated download never reaches java -jar.

public static void ValidateForgeInstallerJar(string jarPath)

Parameters

jarPath string