Ce tutoriel est également disponible en vidéo.
Vous avez maintenant un mod bien complet, cependant seul vous êtes capable de l’utiliser depuis Eclipse. Votre mod est prêt pour une beta public voir pour une version stable ou pour votre serveur. Il faut le compiler afin d’avoir un .jar que nous allons placer dans le dossier mods. Heureusement avec Forge Gradle cette opération se fait en une commande (bien plus simple qu’avant où il fallait faire le zip/jar manuellement, ajouter les ressources, etc …). Pour que ce tutoriel ne soit pas trop court nous allons aussi voir quelques modifications possibles dans le build.gradle.
Comme dit dans l’introduction, il n’y a rien de plus simple. Dans un premier temps rendez-vous dans une console ouverte dans le dossier de Forge. La manipulation a déjà été vu dans le tutoriel sur l’installation de l’espace de travail de Forge. Pour ce qui aurait oublié, sous Windows il faut appuyer sur la touche shift puis faire un clic droit dans le dossier. Ouvrir une fenêtre de commande ici
apparaîtra dans la liste. Cliquez dessus, une invite de commande va s’ouvrir avec le chemin du dossier de Forge écrit. Sous Linux la plupart des distributions intègre de base un menu Ouvrir un terminal ici
lorsqu’on fait un clic droit dans un dossier. Pour les distributions n’intégrant pas ce menu ou pour OS X, ouvrez normalement un terminal puis tapez cd suivis du chemin du dossier (glisser déposer le dossier met automatiquement le chemin du dossier dans le terminal). Sous Mac OS X il semblerai que depuis la version 10.9 en faisant un clic droit dans un dossier une option pour ouvrir un terminal dans le dossier actuel se trouve dans le menu service (à confirmer, je n’ai pas de Mac).
Dans la console tapez simplement la commande suivant :
Windows :
gradlew build
Linux & Mac OS X :
./gradlew build
Une fois le build terminé le fichier jar se trouvera dans le dossier forge/build/libs et par défaut sera nommé modid-1.0.jar. Le nom ainsi que la version peuvent être changé dans le fichier build.gradle (“archivesBaseName” est le nom et “version” est la version).
Si votre mod contient un api pour ajouter du contenu à votre mod (exemple l’api d’IndustrialCraft2 permet d’ajouter des recettes aux différentes machines de ce mod, celui de buildcraft permet d’ajouter des machines qui se connectent aux tuyaux, etc …), ou bien que votre mod est une bibliothèque contenant un certain nombre de fonctions utilitaires (exemple FFMT libs, codechicken core / code chicken libs), mettre à disposition des autres développeurs une archive pour le développement (donc une version du mod faite pour fonctionner sur Eclipse) leur sera très utile.
En effet Minecraft étant obfusqué, le jar conçu pour fonctionner avec le jeu n’est pas compatible avec un environnement de développement.
Pour cela rendez-vous dans le fichier build.gradle et ajoutez ceci (en dessous de processResources) :
task devJar(type: Jar) {
from(sourceSets.main.output) {
include '**'
}
classifier = 'dev'
}
Si vous souhaitez que votre jar de dev contienne aussi les sources du mod, ajoutez entre l’accolade de la task et le from :
| from(sourceSets.main.allSource) { |
| include 'nomDeVotrePackage/**/**' |
| } |
Ce qui donne :
task devJar(type: Jar) {
from(sourceSets.main.allSource) {
include 'nomDeVotrePackage/**/**'
}
from(sourceSets.main.output) {
include '**'
}
classifier = 'dev'
}
Pensez bien à remplacer nomDeVotrePackage par ce qui correspond.
Pour finir à la fin du fichier ajoutez ceci :
build.dependsOn devJar
artifacts {
archives devJar
}
Maintenant lorsque vous aller faire la commande gradlew build vous aurez un second fichier dans le dossier buil/libs/ qui aura en plus dans son nom : “dev”.
Lorsque vous compilez votre mod celui-ci se retrouve à moitié obfusqué afin d’être compatible avec Minecraft (qui est de base obfusqué). Si vous utilisez un logiciel comme JD-gui (logiciel permettant de décompiler un fichier java) vous pourrez constaté que toutes les fonctions et les fields de Minecraft que vous utilisez dans votre mod sont renommés en func_xxxx et field_xxxx. Cela protège un peu votre mod des potentielles personnes cherchant à voler votre mod, cependant c’est loin d’être incontournable. Au contraire avec de la patience et la liste des mappings de mcp il est facile d’avoir un code utilisable sur Eclipse.
Pour protéger un peu plus votre mod je vous propose d’obfusquer une seconde fois votre mod. Cependant gardez à l’esprit qu’avec même beaucoup de patiente on pourra toujours décompiler votre mod. En effet Java est un langage qui est très facilement décompilable. Le but de cette partie va être d’obfusquer les variables propres à votre mod.
Ajoutez à la fin du fichier build.gradle ceci :
task obfJar(type: proguard.gradle.ProGuardTask, dependsOn: reobf) {
inputs.file jar.archivePath
ext {
outDir = file("${buildDir}/proguard")
obfuscatedJar = "${outDir}/${jar.baseName}-${jar.version}.jar"
}
outDir.mkdirs()
injars jar.archivePath
outjars obfuscatedJar
libraryjars configurations.compile
configuration 'proguard.pro'
}
task obfOutput(type: Jar, dependsOn: obfJar) {
appendix = 'obf'
from zipTree(obfJar.obfuscatedJar)
}
artifacts {
archives obfOutput
}
build.dependsOn obfJar, obfOutput
Au début du build.gradle, dans buildscript{ […] dependencies{, en dessous de la ligne :
classpath 'net.minecraftforge.gradle:ForgeGradle:1.2-SNAPSHOT'
Ajoutez :
classpath 'net.sf.proguard:proguard-gradle:5.2.1'
Maintenant dans le dossier de votre projet créez un fichier nommé proguard.pro. Ouvrez-le avec un éditeur de texte puis ajoutez ceci dedans :
-libraryjars <java.home>/lib/rt.jar
-dontoptimize
-dontpreverify
-dontwarn **
-keepattributes *Annotation*
-keep public class fr.minecraftforgefrance.tutoriel.** {
public protected <methods>;
}
-keepclassmembers !public class fr.minecraftforgefrance.tutoriel.** {
public protected <methods>;
}
-keep public class net.minecraft.** {
*;
}
-keepclassmembers enum * {
public static **[] values();
public static ** valueOf(java.lang.String);
}
Remplacez bien le package fr.minecraftforgefrance.tutoriel par le votre ! Pour plus d’information sur ce fichier rendez-vous ici.
Maintenant lancez la commande gradlew build, dans le dossier build/libs vous devrez retrouvez deux fichiers jar, dont un avec -obf dans son nom.
Voila une petite comparaison de la classe principale décompilé avec jd-gui :

Comme vous pouvez le voir le code est bien plus difficile à comprendre sur le fichier de droite (donc celui obfusqué).
https://www.youtube.com/watch?v=oa2ZK3x6E60
*Rédaction :
Correction :

Ce tutoriel de Minecraft Forge France est mis à disposition selon les termes de la licence Creative Commons Attribution - Pas d’Utilisation Commerciale - Partage dans les Mêmes Conditions 4.0 International
Retour vers le sommaire des tutoriels