[Java] Minecraft Launcher erstellen?

  • Hey liebe Community,


    ich habe ein Modpack für Minecraft zusammgestellt... Nun möchte ich auch einen Launcher der das Modpack installiert.
    Soweit geht alles, der Launcher überprüft die Minecraftdaten, lädt das modpack.zip runter und entpackt es wie gewollt.
    Allerdings krieg ich es nicht hin das auch Minecraft an sich startet...
    Mein Code fürs starten lautet:


    Code
    try { Process exec = Runtime.getRuntime().exec(new String[]{"javaw", "-cp", minecraftdir + "minecraft.jar net.minecraft.LauncherFrame " + login + " " + pass}); }
    catch (IOException ex) { Logger.getLogger(login.class.getName()).log(Level.SEVERE, null, ex); }


    Wenn ich mir die Variable "exec" ausgeben lasse erscheint nur "java.lang.ProcessImpl@1ed00d1", aber Minecraft startet sich nicht...
    Weiss jemand vielleicht eine Lösung oder hat den richtigen Befehl zum starten?
    Ich habe den minecraftnamen, minecraftpasswort und die sessionid...
    PS: Ich möchte auch nicht den Pfad %appdata%\.minecraft nutzen sondern %appdata%\.meinOrdnerName


    Danke schonmal im Voraus.

  • Lass mal das w bei Java weg, sodass dort nur noch java steht. Dann müsste sich zumindest eine Konsole öffnen, in der du - vorausgesetzt du bist schnell genug - mögliche Fehler finden kannst. Ein Kumpel hat einen Launcher in C# geschrieben, kann dir aber nicht sagen, wie genau das aussieht.
    Was den Pfad angeht: Den bearbeitest du am besten direkt an der minecraft.jar. Die Klasse lautet Minecraft.class
    Dort mal nach "minecraft" suchen. Irgendwann findest du den Aufruf einer Methode, die an sich nur darauf schließen lässt, das es sich um den Pfad handelt. Kann dir nicht sagen wie die Methode genau heißt, aber irgendwie was mit setDir oder was weiß ich. Wenn du sie gefunden hast, wirst du sie erkennen. Ansonsten melde dich nochmal, dann suche ich nach.


    Edit: Gerade nachgeschaut. Nach dem decompilen mit dem MCP heißt die Datei minecraft\net\minecraft\client\Minecraft.java Die Methode heißt getAppDir.

  • Danke erstmal für die Antwort, also ich habe jetzt nochmal

    Code
    Process exec = Runtime.getRuntime().exec(new String[]{"java", "-cp", minecraftdir + "minecraft.jar net.minecraft.LauncherFrame " + login + " " + pass});


    versucht.
    Bei der Ausgabe von exec steht auch wieder "java.lang.ProcessImpl@12e43f1". (glaube aber auch die Ausgabe ist ja relativ...)
    Und das einzige was ich gefunden habe (durch ca. 3h Googlen) war halt das im Minecraftwiki:
    http://www.minecraftwiki.net/wiki/Client und http://www.minecraftwiki.net/wiki/Minecraft_launcher
    Nur das funktioniert, wie man es ja sieht, nicht.
    Es öffnet sich auch nicht, wie du beschrieben hattest, eine Konsole...

  • Ok. Dann würde ich das mit dem Passwort gleich mal rausschmeißen. Also die Parameter, die die minecraft.jar erwartet sind "username" und "sessionid". Optional wären da noch "server" und "port". Wie das mit der Session-ID funktioniert, weißt du?
    Also die wichtigsten Parameter findest du unter minecraft\net\minecraft\client\MinecraftApplet.java (wieder mit MCP dekompiliert). Da sehe ich jetzt grade z.B. auch noch "stand-alone" und "fullscreen", scheinen aber auch beide optional zu sein. Wie die Parameter anzuwenden sind, kann ich dir nicht sagen. Ich weiß halt nur, dass sie da sind.
    Was du im MinecraftWiki findest sind übrigens die Startparameter für den Launcher. Sind also für die minecraft.jar im Bin-Ordner nicht brauchbar.

  • Also sollte ich

    Code
    Process exec = Runtime.getRuntime().exec(new String[]{"java", "-cp", minecraftdir + "minecraft.jar net.minecraft.LauncherFrame " + login + " " + session});

    benutzen? (session ist ja der dritte (von null aus gesehen) Parameter laut Minecraftwiki ( "<POSIX time>:<hash of password???>:<username with correct capitalization>:<freshly generated session id>:")

  • Ich bin mir nicht sicher, aber ich glaube nicht, dass das Minecraft Wiki dir das beschreibt, was du suchst. Zumal die minecraft.jar im bin-Ordner keine Klasse namens LauncherFrame hat.
    Ich habe gerade so einen Code im Internet gefunden:

    Code
    java -Xms256m -Xmx256m -cp "%APPDATA%\.minecraft\bin\minecraft.jar;%APPDATA%\.minecraft\bin\jinput.jar;%APPDATA%\.minecraft\bin\lwjgl.jar;%APPDATA%\.minecraft\bin\lwjgl_util.jar" -Djava.library.path="%APPDATA%\.minecraft\bin\natives" net.minecraft.client.Minecraft


    Müsstest du halt anpassen. Du müsstest halt die Login-Parameter einfügen usw. Probiere damit einfach ein wenig rum.

  • Ah... das hatte ich auch gefunden gehabt... Ich probier es mal.


    // Edit: Ich habs probiert, aber es ging nicht, mein Code ist/war:

    Code
    Process exec = Runtime.getRuntime().exec(new String[]{"java", "-Xms256m", "-Xms256m", "-cp", minecraftdir +"minecraft.jar;"+minecraftdir+"jinput.jar;"+minecraftdir+"lwjgl.jar;"+minecraftdir+"lwjgl_util.jar", "-Djava.library.path=\""+minecraftdir+"natives\"", "net.minecraft.client.Minecraft"});
  • So, hab nun die Startparameter von @RG : bekommen.

    Code
    -Xms<RAMMin>M -Xmx<RAMMax>M -Djava.library.path=<MCPfad>\\bin\\natives -cp <MCPfad>\\bin\\minecraft.jar;<MCPfad>\\bin\\jinput.jar;<MCPfad>\\bin\\lwjgl.jar;<MCPfad>\\bin\\lwjgl_util.jar net.minecraft.client.Minecraft <USERName> <SESSIONID>;


    Alles in < > musst du ersetzen.
    Davor noch den Pfad von der javaw.exe.
    Da würde ich dir raten nicht einfach javaw zu setzen, weil das abhängig davon ist, ob man die Umgebungsvariablen hat. Da würde ich lieber hingehen und in der Registry unter HKLM\Software\JavaSoft suchen.


    Edit: Denk dran, dass das ganze in C# geschrieben wurde. Statt \\ musst du in Java glaube ich nur ein \ verwenden.

  • Also wäre der Startbefehl in Java:

    Code
    Process exec = Runtime.getRuntime().exec(new String[]{"javaw", "-Xms256M", "-Xmx1024M", "-Djava.library.path="+minecraftdir+"bin/natives -cp "+minecraftdir+"bin/minecraft.jar; "+minecraftdir+"bin/jinput.jar;"+minecraftdir+"bin/lwjgl.jar;"+minecraftdir+"bin/lwjgl_util.jar net.minecraft.client.Minecraft "+login +" "+session});

    ?

  • Damit würde ein Error kommen...
    Er kann eine Datei irgendwie nicht ausführen, obwohl alle vorhanden sind.

    Code
    Feb 23, 2013 8:39:26 PM engineerialauncher.login loginButtonActionPerformed
    SEVERE: null
    java.io.IOException: Cannot run program "javaw -Xms256M -Xmx1024M -Djava.library.path=C:\Dokumente und Einstellungen\pierre\Anwendungsdaten\.minecraft\bin\natives -cp C:\Dokumente und Einstellungen\pierre\Anwendungsdaten\.minecraft\bin\minecraft.jar; C:\Dokumente und Einstellungen\pierre\Anwendungsdaten\.minecraft\bin\jinput.jar;C:\Dokumente und Einstellungen\pierre\Anwendungsdaten\.minecraft\bin\lwjgl.jar;C:\Dokumente und Einstellungen\pierre\Anwendungsdaten\.minecraft\bin\lwjgl_util.jar net.minecraft.client.Minecraft pierre65 6063314891295956147": CreateProcess error=2, Das System kann die angegebene Datei nicht finden
    	at java.lang.ProcessBuilder.start(ProcessBuilder.java:1029)
    	at java.lang.Runtime.exec(Runtime.java:615)
    	at java.lang.Runtime.exec(Runtime.java:483)
    	at engineerialauncher.login.loginButtonActionPerformed(login.java:218)


    // Edit: Code

    Code
    Process exec = Runtime.getRuntime().exec(new String[]{"javaw -Xms256M -Xmx1024M -Djava.library.path="+minecraftdir+"bin\\natives -cp "+minecraftdir+"bin\\minecraft.jar; "+minecraftdir+"bin\\jinput.jar;"+minecraftdir+"bin\\lwjgl.jar;"+minecraftdir+"bin\\lwjgl_util.jar net.minecraft.client.Minecraft "+login +" "+session});

    hab diesmal alles hinternander geschrieben.

  • Also ich hab jetzt

    Code
    Process exec = Runtime.getRuntime().exec("java -Xms256M -Xmx1024M -Djava.library.path="+minecraftdir+"bin\\natives -cp "+minecraftdir+"bin\\minecraft.jar; "+minecraftdir+"bin\\jinput.jar;"+minecraftdir+"bin\\lwjgl.jar;"+minecraftdir+"bin\\lwjgl_util.jar net.minecraft.client.Minecraft "+login +" "+session);

    benutzt und es geht immer noch nicht...

  • Versuch es mal so

    Code
    Process exec = Runtime.getRuntime().exec("java -Xms256M -Xmx1024M -Djava.library.path="+minecraftdir+"bin\natives -cp "+minecraftdir+"bin\minecraft.jar; "+minecraftdir+"bin\jinput.jar;"+minecraftdir+"bin\lwjgl.jar;"+minecraftdir+"bin\lwjgl_util.jar net.minecraft.client.Minecraft "+login +" "+session);


    /- Zeilen Umbruch

  • Da kommt bei mir schon so in dieser Zeile 4 Fehler...

    Code
    illegal escape character
    illegal escape character
    illegal escape character
    illegal escape character


    // Edit: Darum hab ich auch \\ benutzt...

    Bekommst du keine Warnungen oder Fehlermeldungen bei dem vorherigen Code, sobald du die Anwendung versuchst zu starten, odder passiert einfach nix?