Intro
EasyLauncher ist eine modulare Library, die dir den Bau eigener Minecraft-Launcher extrem erleichtert – völlig unabhängig von der genutzten Programmiersprache.
Statt ewig Mojangs JSON-Strukturen zu entschlüsseln oder dich mit dem Microsoft-Login rumzuschlagen, nutzt du einfach unsere API. Da EasyLauncher rein headless läuft, bist du beim Design deiner Oberfläche komplett frei.
Setup
Zieh dir einfach das passende Package über deinen Package-Manager.
npm install easylauncher-node
Quickstart
So startest du Vanilla Minecraft in ein paar Zeilen Python-Code:
from easylauncher import MinecraftLauncher, Version
from easylauncher.auth import OfflineAuth
# Arbeitsverzeichnis festlegen
launcher = MinecraftLauncher(directory="./.minecraft")
# Offline-Account fürs lokale Testen
account = OfflineAuth("Notch")
# Spieldateien ziehen
launcher.install(Version("1.20.4"))
# Game launchen
launcher.launch(
version="1.20.4",
auth=account,
ram_mb=4096
)
Authentifizierung
EasyLauncher bietet Offline-Logins (praktisch für die Entwicklung oder Offline-Server) und die offizielle Microsoft-Authentifizierung via OAuth2.
Offline Login
Ideal, um lokal schnell Sachen auszuprobieren.
import { OfflineAuth } from 'easylauncher';
const auth = new OfflineAuth('DevPlayer_1');
Microsoft Login
Für echte Accounts stößt du einfach den interaktiven Login-Flow an. Den nervigen Xbox-Live-Handshake regeln wir intern.
import { MicrosoftAuth } from 'easylauncher';
const auth = new MicrosoftAuth({ clientId: 'DEINE_AZURE_CLIENT_ID' });
// Öffnet den Browser, damit der Nutzer sich anmelden kann
const session = await auth.loginInteractive();
console.log(`Eingeloggt als ${session.profile.name}`);
Versionen & Mods
EasyLauncher holt sich das offizielle Version-Manifest von Mojang. So kommst du extrem simpel an die neuesten Releases oder Snapshots ran.
use easylauncher::versions::VersionManifest;
// Hol dir den aktuellsten Release
let manifest = VersionManifest::fetch().await?;
let latest_release = manifest.latest.release;
println!("Neueste Version: {}", latest_release);
Fabric / Forge installieren
Modloader einzubinden ist super easy. Du packst einfach das Modloader-Objekt mit in den Install-Aufruf und fertig.
from easylauncher.modloaders import Fabric
# Lädt Minecraft 1.20.4 herunter UND richtet direkt Fabric ein
launcher.install(Version("1.20.4"), modloader=Fabric(loader_version="0.15.7"))
Downloads
Minecraft zieht Tausende von Assets und Libraries. Wir ballern das asynchron durch einen massiv parallelen Download-Pool, damit das so schnell wie möglich geht.
Du kannst dich an die Events hängen, um Ladebalken im Frontend zu füttern:
launcher.on('download_progress', (event) => {
const percent = (event.bytesDownloaded / event.bytesTotal) * 100;
updateProgressBar(percent);
updateStatusText(`Lade Datei: ${event.currentFile}`);
});
Launch-Flags
Egal ob RAM-Zuweisung, Fenstergröße oder Custom JVM-Flags: Du hast die volle Kontrolle. Wenn du nichts angibst, setzen wir smarte Defaults passend zur Java-Version.
LaunchOptions options = new LaunchOptions.Builder()
.setRamMb(8192) // 8GB RAM
.setJavaPath("C:\\Program Files\\Java\\jdk-17\\bin\\java.exe")
.setWindowSize(1920, 1080)
.addJvmArgument("-XX:+UseG1GC")
.build();
launcher.launch("1.20.4", auth, options);
Python Guide
Das Python-Package ist strikt typisiert und voll auf asyncio ausgelegt.
Beginner: Schneller Start
Der schnellste Weg zum Startbildschirm mit dem synchronen Wrapper.
from easylauncher import MinecraftLauncher, Version
from easylauncher.auth import OfflineAuth
launcher = MinecraftLauncher(directory="./.minecraft")
launcher.install(Version("1.20.4"))
launcher.launch(version="1.20.4", auth=OfflineAuth("Player"))
Pro: Async & Customization
Für richtige GUIs (wie PyQt) nutzt du die Async-API. So friert dein Main-Thread nicht ein, wenn du dich an das Event-System hängst.
import asyncio
from easylauncher.asyncio import AsyncMinecraftLauncher
from easylauncher.events import DownloadProgressEvent
async def main():
launcher = AsyncMinecraftLauncher(directory="./.minecraft")
@launcher.on(DownloadProgressEvent)
async def on_progress(event):
print(f"{event.downloaded_files}/{event.total_files} Dateien geladen")
await launcher.install_async("1.20.4")
process = await launcher.launch_async("1.20.4")
await process.wait()
asyncio.run(main())
Node.js Guide
Der Go-To Weg für Apps mit Electron, Tauri oder reinem Node.
Beginner: Express Start
import { MinecraftLauncher, OfflineAuth } from 'easylauncher';
const launcher = new MinecraftLauncher('./.minecraft');
await launcher.install('1.20.4');
await launcher.launch({
version: '1.20.4',
auth: new OfflineAuth('Steve')
});
Pro: Electron IPC & Modloader
Nutz die IPC-Bridge, um Progress-Events sauber in deinen Renderer-Prozess (Frontend) durchzureichen.
import { ipcMain } from 'electron';
import { MinecraftLauncher, Modloaders } from 'easylauncher';
ipcMain.handle('launch-game', async (event, args) => {
const launcher = new MinecraftLauncher(args.dir);
launcher.on('progress', (data) => event.sender.send('dl-progress', data));
await launcher.install('1.20.4', {
modloader: new Modloaders.Fabric('0.15.7'),
parallelDownloads: 16
});
return await launcher.launch({
version: '1.20.4',
memory: { min: '2G', max: '6G' }
});
});
Java Guide
Basiert auf modernen Java 17 Features mit sauberen Callbacks für Swing oder JavaFX.
Beginner: Direkter Start
MinecraftLauncher launcher = new MinecraftLauncher(Path.of("./.minecraft"));
launcher.install(new Version("1.20.4"));
launcher.launch("1.20.4", new OfflineAuth("Player"));
Pro: Eigener Auth-Flow
Bau dir headless einen Launcher, zieh dir den Microsoft OAuth2 Flow und lies den stdout des Spiels direkt aus.
MicrosoftAuth auth = new MicrosoftAuth(CLIENT_ID);
auth.loginDeviceCode(code -> {
System.out.println("Öffne: " + code.verificationUrl());
System.out.println("Gib diesen Code ein: " + code.userCode());
}).thenAccept(session -> {
LaunchProcess process = launcher.launch("1.20.4", session,
new LaunchOptions.Builder().setRamMb(8192).build()
);
process.onLogLine(line -> logger.info("[GAME_STDOUT] " + line));
});
Rust Guide
Baut auf tokio für kranke Performance und speichersichere asynchrone Downloads.
Beginner: Standard Start
use easylauncher::{MinecraftLauncher, auth::OfflineAuth};
#[tokio::main]
async fn main() -> Result<(), Box> {
let launcher = MinecraftLauncher::new("./.minecraft");
launcher.install("1.20.4").await?;
launcher.launch("1.20.4", OfflineAuth::new("Player")).await?;
Ok(())
}
Pro: Totale Kontrolle
Klemm dich tief in den HTTP-Client, wirf Custom Header für Proxies rein oder pass den JRE-Provider komplett an.
use easylauncher::{MinecraftLauncher, config::LauncherConfig};
let config = LauncherConfig::builder()
.proxy("http://localhost:8080")
.custom_jre_provider(|version| {
format!("https://mein-server.com/jre/{}-linux.tar.gz", version)
})
.build();
let launcher = MinecraftLauncher::with_config("./.minecraft", config);
let mut rx = launcher.install_with_channel("1.20.4").await?;
while let Some(event) = rx.recv().await {
update_ui(event);
}