Tutoriel [Guide] [MAJ 12/07/14]Créer un launcher pour 1.6.2/1.6.4 avec mods

Statut
N'est pas ouverte pour d'autres réponses.

jambonlatex

Architecte en herbe
11 Octobre 2013
133
22
125
32
Bonjour à tous !

Tout d'abord j'espère bien poster dans la bonne section...

Voilà je commence par ce petit tuto, qui en fait va s'étendre au fil de mes connaissances, mais aussi par vos interventions (je l’espère) qui me seront utiles pour peaufiner ce post.

Ayant dans l'optique de créer un launcher perso pour mon serveur en 1.6.2, je me suis mis au boulot toute la journée pour comprendre comment ça marche...


EDIT : MERCI POUR LES 10000 VISITES DU TUTORIEL ! :)

TODO LIST :
05/12/2013 - L'authentification perso (WIP)​
21/11/2013 -Comparaison des ressources et suppression des outdated.
- Sauvegarde de dernière session
- Le rajout de mods directement depuis son repository
Je compte donc sur vous pour avancer le projet sur ces points-là !

On commence !

Pré-requis :
-Java JDK SE 6 (dernière version) : http://adf.ly/XsLeb ou ici
-Eclipse IDE For Java Developpers (JUNO version en 32bits) : http://adf.ly/XsKBW
- Code-source v.135 : http://adf.ly/am3pB
-Pack Custom - MinecraftForge 1.6.2 : http://adf.ly/XsJxi
-Pack Custom - MinecraftForge 1.6.4 : http://adf.ly/alzab
-Pack Custom - Minecraft 1.7.2 : http://adf.ly/5359908/pack-custom---minecraft172
-Une serveur FTP accessible par requête HTTP. (celui de votre site web par exemple)
-Dossier Ressources (pour les mods client) : http://adf.ly/a9evm





1/Installation d'Eclipse :
-Après avoir téléchargé l'archive zip du programme, décompressez là à l'endroit où vous voulez que l'installation soit faite.
-Dans le dossier Eclipse, lancez Eclipse.exe
-Allez dans Help, puis cliquez sur Check Updates. Laissez lui faire les mises à jours si nécessaires.
-Retournez dans Help puis dans Eclipse MarketPlace.
-Cherchez les plugins "Maven Integration" et l'installer.
Ce plugin est nécessaire à l'importation de code Maven.

xr22.png
2/Importation des codes :
-Télécharger le code source et décompressez-le dans Mes Documents par exemple.
-Dans la fenêtre Project Explorer, faites un clic-droit et choisissez Import/Import... puis dans Maven choisissez Existing Maven Project
-Allez choisir les 2 dossiers décompressés par l'archive. (un par un)
-Les 2 projets Bootstrap et Launcher s'afficheront alors dans votre workspace.

duv8.png
3/Ressources MinecraftForge :
-Une fois le fichier Pack Custom téléchargé, extraire l'archive.
-Ce package contient les fichiers Jar dépendants au bon fonctionnement de MinecraftForge.
-Transférez le dossier Launcher sur votre serveur FTP.
-Veuillez noter l'adresse HTTP du dossier (ex : "http://monsite.com/launcher/" )
-Dans le dossier Launcher/versions/1.6.2-custom/, éditez le fichier "1.6.2-custom.json"
-Au debut du code vous trouverez trois ligne intitulées URL avec pour valeur des adresses HTTP. Remplacez ces adresses par celles de votre serveur suivi par "maven/" (ex : "http://monsite.com/launcher/maven/" )

exm1.png
4/Configuration de Launcher.jar
-Déroulez le projet minecraft-launcher et rendez-vous dans src/main/java puis net.minecraft.launcher et ouvrez la classe LauncherConstants.java
  • VERSION_NAME correspond à la version du launcher actuel
  • DEFAULT_PROFILE_NAME correspond au nom du profil par défaut
  • SERVER_NAME correspond au nom de votre serveur
  • URL_DOWNLOAD_BASE correspond à l'url du dossier uploadé plus haut
  • URL_DOWNLOAD_MODS correspond au dossier de ressources perso que vous hébergez
  • URL_BLOG correspond à votre page pour les news (exemple :http://mcupdate.tumblr.com)
  • URL_BOOTSTRAP_DOWNLOAD correspond à l'URL du fichier bootstrap.jar


Remarque : Pour faire fonctionner 1.7.2, il faut mettre la valeur 9 à la version du launcher.

Le reste sert pour un système d'authentification perso.
NB : Dans URL_DOWNLOAD_MODS il faut mettre le dossier racine des ressources (si vous avez des mods, créer un dossier "mods" dans votre dossier racine "ressources" et mettez vos mods à l'intérieur)
NB 2 : POUR LE MOMENT, L’HÉBERGEMENT DE RESSOURCES PERSO FONCTIONNENT BIEN SUR SERVEUR AMAZON S3, MAIS IL EST POSSIBLE DE LE METTRE SUR VOTRE FTP EN TÉLÉCHARGEANT CECI. IL FAUT DÉCOMPRESSER LE FICHIER SUR VOTRE FTP ET VOUS AUREZ VOTRE RÉPERTOIRE "RESSOURCES" PRET A L'EMPLOI.

EDIT : NOUVEAU LIEN DES RESSOURCES DE BASE DE MOJANG :
Code:
http://resources.download.minecraft.net/

NOUVEAU LIEN DES LIBRAIRIES MOJANG :
Code:
https://libraries.minecraft.net/

-Une fois que vous avez rempli ça correctement, Clic droit sur le projet, Run As > Maven Build... et dans les champ Goals mettez package.
-Après avoir cliqué sur Run, attendez que Maven vérifie le code. Une fois terminé rendez-vous dans le dossier du projet, ouvrez le dossier target et renommez le fichier minecraft-launcher-1.0.1-jar-with-dependencies.jar en launcher.jar puis uploadez le sur votre FTP dans le dossier "Launcher/".

9z0f.png
r0tn.png
5/Configuration de Bootstrap.jar

-Déroulez le projet minecraft-bootstrap et rendez-vous dans src/main/java puis net.minecraft.bootstrap et ouvrez la classe BootstrapConstants.java
  • MD5_FILE correspond au lien du petit fichier qui contient le hash md5 de votre launcher (il est dans l'archive plus haut)
  • SERVER_NAME correspond au nom de votre serveur
  • APPLICATION_NAME correspond le dossier dans lequel sera stocké les fichiers (exemple : harmonycraft, les fichiers seront donc sauvegardés dans un .harmonycraft)
  • LAUNCHER_URL correspond à l'url du launcher que vous venez d'uploader dans l'étape précédente
-Une fois que vous avez rempli ça correctement, Clic droit sur le projet, Run As > Maven Build... et dans les champ Goals mettez package.
-Après avoir cliqué sur Run, attendez que Maven vérifie le code. Une fois terminé rendez-vous dans le dossier du projet, ouvrez le dossier target et renommez le fichier minecraft-bootstrap-1.0.1-jar-with-dependencies.jar en bootstrap.jar puis uploadez le sur votre FTP dans le dossier "Launcher/".
-Vérifiez bien que son adresse sur FTP est bien la même que dans votre configuration du launcher dans URL_BOOTSTRAP_DOWNLOAD.
2jzv.png

6/Conversion de Bootstrap.jar en Launcher.exe
-Téléchargez le programme launch4j.
-Installez le programme.
-Ouvrez le programme.
-Dans Output File entre l'endroit où votre launcher.exe va être enregistré.
-Dans Jar choisissez votre fichier Bootstrap.jar précédement transféré sur votre FTP.
-Vous pouvez rajouter un icone à votre fichier exe dans la partie Icon. (le fichier doit avoir l'extension .ico)
-Dans l'onglet JRE, inscrivez "1.6.2" dans Min JRE Version.
-Cliquez sur l'icone représentant une roue dentée en haut à gauche. Enregistrez le fichier config ou vous voulez.
-En appuyant sur Play, vous lancerez votre nouveau fichier EXE.
wp21.png
Voilà !
Chez moi ça marche très bien. Pensez aussi à avoir un accès total a vos fichiers sur serveur FTP (perso pour le tuto j'étais en chmod 777).
J'attends donc vos avis pour la mise en place d'un téléchargement d'une archive contenant tous les mods provenant du serveur FTP.


EDIT DU 21/11/2013 :​
La supression des outdated mods est arrivé !​
Screen pour un dossier mods en regle :​
hhhhhh.png


Et un petit malin qui essaye d'installer d'autres mods...​

hhhhhh.png


FAQ
-Je n'ai pas accès à mes fichiers uploadés par FTP ?
--> Vérifier vos permissions CHMOD, il faut que vos fichiers soient au moins accessibles en lecture et exécution. Si ca ne suffit pas, créer un nouveau fichier txt avec ecrit à l'intérieur "Options +Indexes" (sans guillemets), et uploadez-le à la racine de votre dossier launcher/ puis nommez-le ".htaccess".


-Peut-on ajouter la 1.6.4 en plus de la 1.6.2 ?
--> Oui. Il suffit de télécharger ce pack et de l'installer en écrasant l'ancien. Vous aurez alors 2 versions au choix lors du lancement du jeu.

-Les ressources de bases (comme les sons du jeu) ne sont pas téléchargés, que faire ?
-->Amazon et Mojang ont des petits problèmes, en fait il y a beaucoup trop de connexions sur le serveur Amazon donc impossible d'obtenir les ressources.
Vous pouvez utiliser un serveur secondaire en changeant dans LauncherConstants :
Code:
public static final String URL_RESOURCE_BASE = "https://s3.amazonaws.com/Minecraft.Resources/"
Par :
Code:
public static final String URL_RESOURCE_BASE = "https://s3.amazonaws.com/MinecraftResources/

EDIT : NOUVEAU LIEN DES RESSOURCES DE BASE DE MOJANG :
Code:
http://resources.download.minecraft.net/

-Vous voulez exclure des fichiers de la purge dans le dossier mod ?
Exemple avec les fichiers type .txt :​
Dans la classe Lister du Launcher ligne 77 :
Code:
if(lmd5.contains(md5) && !it.getName().endsWith(".cfg") && !it.getName().endsWith(".json")){
Il faut ajouter l'exception pour le .txt :
Code:
if(lmd5.contains(md5) && !it.getName().endsWith(".cfg") && !it.getName().endsWith(".txt") && !it.getName().endsWith(".json")){
PROBLEME AVEC LE LAUNCHER ?
Vérifiez :​
-Que les liens que vous avez mis dans le code source sont accessibles (copier-coller le lien dans un navigateur web)
-Que les fichiers JSON soient bien nommés "versions.json" et "X.X.X-NOM_DE_VERSION.json".
-Que le fichier "versions.json" pointe bien vers la bonne version :
Code:
{
  "versions": [
  {
"time": "2013-09-15T23:04:53-0500",
    "id": "X.X.X-NOM_DE_VERSION",
    "type": "release",
    "processArguments": "username_session_version",
    "releaseTime": "1960-01-01T00:00:00-0700"
    }
    ],
  "latest": {
    "snapshot": "X.X.X-NOM_DE_VERSION",
    "release": "X.X.X-NOM_DE_VERSION"
  }
}

-Que le fichier "X.X.X-NOM_DE_VERSION.json" est ses métadonnées qui concordent (tout en bas du script) :
Code:
    ],
    "mainClass": "net.minecraft.launchwrapper.Launch",
    "minimumLauncherVersion": 4,
    "time": "2013-09-15T23:04:53-0500",
    "id": "X.X.X-NOM_DE_VERSION",
    "type": "release",
    "processArguments": "username_session_version",
    "releaseTime": "1960-01-01T00:00:00-0700"
}

-Que les Timestamps (balise "time") soient correct aussi (ils doivent tous être les mêmes partout !).
-Que vous ayez bien mis des urls accessibles dans votre fichier "X.X.X-NOM_DE_VERSION.json".

Les mods ne se télécharge pas ?
-Vérifiez que le lien URL_DOWNLOAD_MODS est accessible.
-Lorsque vous tentez d'aller sur URL_DOWNLOAD_MODS avec un navigateur web, il doit afficher une liste XML.
-Vérifiez que la condition useMod soit sur "true" dans LauncherConstants.



Merci à Rellynn pour le code source ! :)
 

mimic0212

Bucheron
13 Octobre 2013
11
0
12
Merci pour ce tuto !
Mais j'ai un petit problème avec... lorsque je relance le launcher, je suis obligé de retaper a chaque fois mon adresse mail et mon mot de passe pourtant il y a bien le launcher_profiles.json dans le répertoire du jeu et aussi j'ai une erreur au lancement du launcher,mais il se lance quand meme.
Code:
Unexpected exception refreshing profile list
java.lang.RuntimeException: Unable to invoke no-args constructor for interface java.lang.reflect.Type. Register an InstanceCreator with Gson for this type may fix this problem.
    at com.google.gson.internal.ConstructorConstructor$12.construct(ConstructorConstructor.java:210)
    at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:162)
    at com.google.gson.Gson.fromJson(Gson.java:803)
    at com.google.gson.Gson.fromJson(Gson.java:868)
    at com.google.gson.Gson$1.deserialize(Gson.java:126)
    at net.minecraft.launcher.authentication.AuthenticationDatabase$Serializer.deserialize(AuthenticationDatabase.java:28)
    at net.minecraft.launcher.authentication.AuthenticationDatabase$Serializer.deserialize(AuthenticationDatabase.java:1)
    at com.google.gson.TreeTypeAdapter.read(TreeTypeAdapter.java:58)
    at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.read(ReflectiveTypeAdapterFactory.java:93)
    at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:172)
    at com.google.gson.Gson.fromJson(Gson.java:803)
    at com.google.gson.Gson.fromJson(Gson.java:768)
    at com.google.gson.Gson.fromJson(Gson.java:717)
    at com.google.gson.Gson.fromJson(Gson.java:689)
    at net.minecraft.launcher.profile.ProfileManager.loadProfiles(ProfileManager.java:116)
    at net.minecraft.launcher.Launcher$3.run(Launcher.java:329)
    at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
    at java.util.concurrent.FutureTask.run(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at com.google.gson.internal.UnsafeAllocator$1.newInstance(UnsafeAllocator.java:48)
    at com.google.gson.internal.ConstructorConstructor$12.construct(ConstructorConstructor.java:207)
    ... 20 more
Caused by: java.lang.InstantiationException: java.lang.reflect.Type
    at sun.misc.Unsafe.allocateInstance(Native Method)
    ... 26 more
 

jambonlatex

Architecte en herbe
11 Octobre 2013
133
22
125
32
Merci pour ce tuto !
Mais j'ai un petit problème avec... lorsque je relance le launcher, je suis obligé de retaper a chaque fois mon adresse mail et mon mot de passe pourtant il y a bien le launcher_profiles.json dans le répertoire du jeu et aussi j'ai une erreur au lancement du launcher,mais il se lance quand meme.
Code:
Unexpected exception refreshing profile list
java.lang.RuntimeException: Unable to invoke no-args constructor for interface java.lang.reflect.Type. Register an InstanceCreator with Gson for this type may fix this problem.
    at com.google.gson.internal.ConstructorConstructor$12.construct(ConstructorConstructor.java:210)
    at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:162)
    at com.google.gson.Gson.fromJson(Gson.java:803)
    at com.google.gson.Gson.fromJson(Gson.java:868)
    at com.google.gson.Gson$1.deserialize(Gson.java:126)
    at net.minecraft.launcher.authentication.AuthenticationDatabase$Serializer.deserialize(AuthenticationDatabase.java:28)
    at net.minecraft.launcher.authentication.AuthenticationDatabase$Serializer.deserialize(AuthenticationDatabase.java:1)
    at com.google.gson.TreeTypeAdapter.read(TreeTypeAdapter.java:58)
    at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.read(ReflectiveTypeAdapterFactory.java:93)
    at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:172)
    at com.google.gson.Gson.fromJson(Gson.java:803)
    at com.google.gson.Gson.fromJson(Gson.java:768)
    at com.google.gson.Gson.fromJson(Gson.java:717)
    at com.google.gson.Gson.fromJson(Gson.java:689)
    at net.minecraft.launcher.profile.ProfileManager.loadProfiles(ProfileManager.java:116)
    at net.minecraft.launcher.Launcher$3.run(Launcher.java:329)
    at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
    at java.util.concurrent.FutureTask.run(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at com.google.gson.internal.UnsafeAllocator$1.newInstance(UnsafeAllocator.java:48)
    at com.google.gson.internal.ConstructorConstructor$12.construct(ConstructorConstructor.java:207)
    ... 20 more
Caused by: java.lang.InstantiationException: java.lang.reflect.Type
    at sun.misc.Unsafe.allocateInstance(Native Method)
    ... 26 more

Tu as compilé tes fichiers jar en JDK 1.6 ou 1.7 ? Essayes les deux pour voir si tu as un problème.
Pour la retenue du mot de passe effectivement c'est en cours de codage ;)
 
  • J'aime
Reactions: Frayda_78

mimic0212

Bucheron
13 Octobre 2013
11
0
12
Ok merci,
j'ai compilé avec le JDK 1.7 mais je retrouve plus le 1.6...
sinon pour faire la mise à jour des mods comment ça se passe?
J'ai essayé de mettre a jour un mods mais il a garder l'ancienne version dans le dossier mods du jeu en plus de la nouvelle version et après sa "crash" avec forge
Edit: enfaite Forge fait un message comme quoi il y a des mods dupliquer
 

jambonlatex

Architecte en herbe
11 Octobre 2013
133
22
125
32
Pour la mise à jour des mods, dans ton dossier mods sur ton FTP il faut remplacer ton fichier mod.jar par le nouveau mod.jar. Je précise "mod.jar" car tu vois que les 2 fichiers ont le même nom mais pas forcement la même version.
En fait la requête utilisée est la même que pour les assets officiels du jeu : Le launcher lit la page "http://monsite.com/ressources", qui n'est autre qu'un fichier XML généré par une page PHP dans la racine du dossier.
Ce fichier XML donnent toutes les caractéristiques des fichiers présents dans le dossier "ressources" : nom, taille, md5, clé, etc... Mojang eux-même gardent toujours les mêmes noms d'assets, sinon il faudrait tout re-télécharger à chaque lancement.
Il faut donc bien que tes 2 versions différentes aient le même nom pour pouvoir être "écrasé". ;)

JDK 1.6 : http://www.oracle.com/technetwork/j...ownloads-javase6-419409.html#jdk-6u45-oth-JPR

EDIT : je tiens à vous informer qu'une prochain code-source va bientot voir le jour, avec une option supplémentaire qui fonctionnera avec un plugin craftbukkit, et qui utilisera un système d’authentification supplémentaire sur serveur perso en plus de celui de Mojang (versions crackées, passez votre chemin). Il vous faudra une base de donnée MySQL comme vous devez vous en douter...
 

mimic0212

Bucheron
13 Octobre 2013
11
0
12
Ok merci beaucoup et désolé de poser autant de question... Mais est-ce qu'il y a un moyen de forcer la mise à jour? Pour la version du jeu comme pour les mods? Parce que j'ai vu qu'il suffisait de télécharger le zip pour passer en 1.6.4 et de le mettre dans le ftp mais de quoi est-il fait et comment est-ce qu'on pourra passer par exemple a la version 1.7 de Minecraft?
 

jambonlatex

Architecte en herbe
11 Octobre 2013
133
22
125
32
Alors pour la version 1.7 je ne m'avance pas trop dans le sujet, c'est encore l'inconnu. Pour la 1.6.4, tout ce qu'il y a dans le zip ce sont les fichiers pour le FTP 1.6.4.jar, 1.6.4.json + toutes les dépendances (librairies scala, compileur) + le fichier versions.json. Le fichier versions.json donne la liste des versions présentes sur serveur (maintenant on a le choix des versions). Sous la liste tu as la "latest" qui est donc la version par defaut lors du lancement du launcher.
Si tu veux faire un FORCE UPDATE je te suggère d'inscrire seulement la version qui doit être utilisé dans ce fichier.
Passer de 1.6.2 à 1.6.4 :​
versions.json au depart :
Code:
{
  "versions": [
  {
"time": "2013-09-15T23:04:53-0500",
    "id": "1.6.2-custom",
    "type": "release",
    "processArguments": "username_session_version",
    "releaseTime": "1960-01-01T00:00:00-0700"
    }
    ],
  "latest": {
    "snapshot": "1.6.2-custom",
    "release": "1.6.2-custom"
  }
}

Au final :
Code:
{
  "versions": [
  {
"time": "2013-10-09T21:03:12-0500",
    "id": "1.6.4-custom",
    "type": "release",
    "processArguments": "username_session_version",
    "releaseTime": "1960-01-01T00:00:00-0700"
    }
    ],
  "latest": {
    "snapshot": "1.6.4-custom",
    "release": "1.6.4-custom"
  }
}
 
Statut
N'est pas ouverte pour d'autres réponses.