Minecraft Launcher Programmieren [Suche nach Tutorial]
Hallo Leute, Seit einiger Zeit bin ich auf der Suche wie man einen eigenen Launcher programmiert. Nehmen wir als Beispiel Minecraft. Wenn ich einen Minecraft Launcher Programmieren soll muss ich ja irgendwo anfangen. Ich habe eigentlich nicht vor eine einfache z. B. Visual Basis Anwendung oder auch.Bat zu machen mit der ich einfach nur Minecraft starte. Ich würde es gerne mit Login Screen machen. Ebenfalls habe ich schon ein bisschen gesucht aber immer leider nur Stücken zusammen gesammelt - welches wie sich später erwiesen - hatte nutzlos war :D --> -.-' naja deswegen wollte ich fragen ob ihr mir eine Anleitung schreiben oder ein einfaches Tutorial kennt wo dies genau erklärt wir...:D
P.S Ich habe sowohl Java als auch C++ kentnisse.
Danke im Voraus :DD
5 Antworten
Glaub mir, einen eigenen Launcher zu programmieren ist so gut wie unmöglich - und das ist absicht. Denn sonst könnte man ja einfach einen machen, für den man MC nicht gekauft haben muss.
Wenn du es trotzdem mal versuchen möchtest, dekompilier die launcher.jar aus %appdata%.minecraft und versuch zu finden, wie Minecraft gestartet wird. Dann musst du das nur noch in eigenen Code betten und hoffen, das es startet. Wenn du das geschafft hast, kannst du dann deinen Launcher drum herum basteln.
Viel Spaß ;-)
EDIT:
Wozu eigentlich einen eigenen Launcher?
Woher kommen dann FTB Launcher, Technic Launcher, MultiMC, MagicLauncher etc.?
Es ist ziemlich simpel, einen Launcher zu schreiben xD Und das war auch schon vor 5 Jahren so einfach.
Was heißt "Kenntnisse" aus der Tatsache, dass du es mit Batch versuchen wolltest, lese ich, dass es damit nicht weit her ist?
Ich kenne mich eigentlich relativ gut mit Java aus.
Als ich letztens so eine Frage gestellt habe kamen hilfreiche Antworten wie:" Man mach doch einfach ne Batch dann kannst auch den Ram einstellen und so -.-' .
Und ich habe es noch nie mit einer Batch versucht da ich einen Launcher machen will und keinen Starten will :D
Ein Tutorial wirst du nicht finden - dafür ist das einfach zu komplex und es gibt zu viele Möglichkeiten wie man das programmieren könnte.
Aber für die einzelnen Dinge hilft dir eventuell folgendes:
- Login auf minecraft.net: minecraft.gamepedia.com/User:Oxguy3/Minecraft.net_API
- Der Sysinternals Process Explorer gibt dir den Befehl, mit dem Minecraft dann gestartet wird: technet.microsoft.com/de-de/sysinternals/bb896653.aspx
- mit dem Java Decompiler kannst du dir den Quelltext des Original-Launchers anzeigen lassen: jd.benow.ca
- SK's Launcher ist komplett Open Source, falls du noch mehr Inspirationen brauchst: github.com/sk89q/skmclauncher
Hoffe ich konnte dir weiterhelfen!
Was irgendwie logisch ist, da das Programm ja kompiliert wurde - dennoch zeigt dieser hier einen ziemlich übersichtlichen Quellcode. Da das dennoch etwas unverständlich sein kann, gibt es ja noch den nächsten Punkt...
Wenn ich mich jetzt nicht total irre ist der Launcher doch eine .exe und eine .exe kann man doch nicht Decompilen, oder?
Und der Launcher ist gar keine exe. Er ist eine als EXE getarnte executable JAR.
der Minecraft Launcher ist keine Java Anwendung des müsste soweit ich weis C# oder C++ sein
Dein Launcher muss nur eines können: Die minecraft.jav starten. Die findest du unter
%appdata%\.minecraft\versions\%version%
Von java aus kannst du die Datei mit dem Programexecuter aus starten. Im Ordner liegt auch eine Datei mit den passenden Argumenten bei.
Da du Java Kenntnisse hast, dürfte der Rest eigentlich nicht allzu schwer werden.
PS.: Wozu einen neuen Launcher programmieren?
Ist das nur ein Fehler oder meinst du wirklich .jav? Und dann noch was: Wenn ich nach C:\Users\lalala\AppData\Roaming.minecraft\versions wie komm ich dann an die "jav" und wo liegt die Datei mit den Argumenten D:
Er meint wohl "jar". Und er übersieht, dass die minecraft.jar nicht wirklich unabhängig vom Launcher funktioniert und seit dme neuen Launcher überhaupt nicht mehr in der Form existiert.
Beispiel:
C:\Users\%username%\AppData\Roaming\.minecraft\versions\1.6.2
Dort findest du
1.6.2.jar
1.6.2.json
formatiert sieht die json so aus:
{
"id": "1.6.2",
"time": "2013-08-06T13:00:00+02:00",
"releaseTime": "2013-07-05T15:09:02+02:00",
"type": "release",
"minecraftArguments": "--username ${auth_player_name} --session ${auth_session} --version ${version_name} --gameDir ${game_directory} --assetsDir ${game_assets}",
"libraries": [
{
"name": "net.sf.jopt-simple:jopt-simple:4.5"
},
{
"name": "com.paulscode:codecjorbis:20101023"
},
{
"name": "com.paulscode:codecwav:20101023"
},
{
"name": "com.paulscode:libraryjavasound:20101123"
},
{
"name": "com.paulscode:librarylwjglopenal:20100824"
},
{
"name": "com.paulscode:soundsystem:20120107"
},
{
"name": "argo:argo:2.25_fixed"
},
{
"name": "org.bouncycastle:bcprov-jdk15on:1.47"
},
{
"name": "com.google.guava:guava:14.0"
},
{
"name": "org.apache.commons:commons-lang3:3.1"
},
{
"name": "commons-io:commons-io:2.4"
},
{
"name": "net.java.jinput:jinput:2.0.5"
},
{
"name": "net.java.jutils:jutils:1.0.0"
},
{
"name": "com.google.code.gson:gson:2.2.2"
},
{
"name": "org.lwjgl.lwjgl:lwjgl:2.9.0",
"rules": [
{
"action": "allow"
},
{
"action": "disallow",
"os": {
"name": "osx",
"version": "^10\\.5\\.\\d$"
}
}
]
},
{
"name": "org.lwjgl.lwjgl:lwjgl_util:2.9.0",
"rules": [
{
"action": "allow"
},
{
"action": "disallow",
"os": {
"name": "osx",
"version": "^10\\.5\\.\\d$"
}
}
]
},
{
"name": "org.lwjgl.lwjgl:lwjgl-platform:2.9.0",
"rules": [
{
"action": "allow"
},
{
"action": "disallow",
"os": {
"name": "osx",
"version": "^10\\.5\\.\\d$"
}
}
],
"natives": {
"linux": "natives-linux",
"windows": "natives-windows",
"osx": "natives-osx"
},
"extract": {
"exclude": [
"META-INF/"
]
}
},
{
"name": "org.lwjgl.lwjgl:lwjgl:2.9.1-nightly-20130708-debug3",
"rules": [
{
"action": "allow",
"os": {
"name": "osx",
"version": "^10\\.5\\.\\d$"
}
}
]
},
{
"name": "org.lwjgl.lwjgl:lwjgl_util:2.9.1-nightly-20130708-debug3",
"rules": [
{
"action": "allow",
"os": {
"name": "osx",
"version": "^10\\.5\\.\\d$"
}
}
]
},
{
"name": "org.lwjgl.lwjgl:lwjgl-platform:2.9.1-nightly-20130708-debug3",
"rules": [
{
"action": "allow",
"os": {
"name": "osx",
"version": "^10\\.5\\.\\d$"
}
}
],
"natives": {
"linux": "natives-linux",
"windows": "natives-windows",
"osx": "natives-osx"
},
"extract": {
"exclude": [
"META-INF/"
]
}
},
{
"name": "net.java.jinput:jinput-platform:2.0.5",
"natives": {
"linux": "natives-linux",
"windows": "natives-windows",
"osx": "natives-osx"
},
"extract": {
"exclude": [
"META-INF/"
]
}
}
],
"mainClass": "net.minecraft.client.main.Main",
"minimumLauncherVersion": 4
}
Damit sollte dein Launcher umgehen können:)
- Arguments: Erklärt sich von selbst
- Libraries: Zu ladende Bibliotheken. Sie werden in Java mit dem Schalter -cp oder mit System.loadLibrary(); eingebunden und einzeln aufgezählt.
- mainClass Hauptklasse. Ebenfalls nötig
- minimumLauncherVersion Brauchst du nicht unbedingt
Die minecraft.jar gibt es noch - woanders und mit anderem Namen. Sie funktioniert auch ohne Launcher, man muss sie nur mit den passenden Argumenten starten
Und er übersieht, dass die minecraft.jar nicht wirklich unabhängig vom Launcher funktioniert
Das Bezweifle ich
Launcher geht. Aber Wenn du das machen möchtest benötigst du die anmelde cods usw... von Mojang/Microsoft. Ich bin Gerade dabei mich mit Mojang in verbindung zusetzen denn ich möchte auch einen Launcher erstellen.
Decompiler bringen nicht den ursprünglichen Quellcode, sondern nur einen, der irgendwie zum Ergebnis führt