Préparer son environnement de développement avec le MDK
-
Le code source de Minecraft n’est pas publié par Mojang et le code compilé est fortement offusqué (les variables et fonctions sont nommées de façon à être difficilement compréhensibles). Afin de pouvoir modder le jeu plus facilement, des outils ont été construits par la communauté, dont des outils de décompilation et des mappings (pour remplacer les noms illisibles par des noms anglais, plus pratiques à manipuler).
Forge fourni donc le MDK (Mod Development Kit), une archive contenant tout ce qu’il faut pour démarrer la création d’un mod : Gradle comme moteur de production, qui va nous permettre de gérer la création de l’espace de travail pour Eclipse, Idea ou VS Code, la compilation, mais aussi grâce au plugin ForgeGradle, décompiler le code de Minecraft, le dé-offusquer en appliquant des mappings et ré-offusquer après compilation.Sommaire du tutoriel
- Pré-requis
- Téléchargement et préparation
- Configuration du MDK
- Fonctionnement des mappings
- Importation du projet
- Licence et attribution
Pré-requis
Téléchargement et préparation
Le kit de développement de mod Forge est disponible à l’adresse suivante : https://files.minecraftforge.net/
Prennez le “Mdk” recommandée si vous souhaitez la version stable, ou la dernière version en date si vous souhaitez les dernières fonctionnalités (ou s’il n’y a pas version recommandée).
Il s’agit d’une archive zip qu’il faudra extraire dans un dossier au choix. Le nom du dossier sera le nom du projet dans l’IDE par la suite, on nommera donc le dossier avec le nom de son futur mod (il est toujours possible de renommer après coup le nom affiché dans l’IDE). Dans les différents tutoriels publiés sur Minecraft Forge France, ce seraModTutorial
. Le terme « Dossier du MDK » sera utilisé pour désigner ce dossier dans la suite et dans les futurs tutoriels.Configuration du MDK
Dans le dossier du MDK se trouve un fichier
build.gradle
gérant quelques paramètres. Il peut être ouvert avec n’importe quel éditeur de texte.
Tout d’abord, on trouve un blocbuildscript
contenant le nécessaire pour ajouter le plugin ForgeGradle.
On y retrouve ensuite des éléments n’étant dans aucun bloc, permettant d’appliquer les plugins puis des configurations intéressantes à modifier :version = '1.0' group = 'com.yourname.modid' // http://maven.apache.org/guides/mini/guide-naming-conventions.html archivesBaseName = 'modid'
Ces trois lignes contrôlent dans l’ordre :
- la version du mod
- le groupe du mod : cela correspond au package du mod, généralement un nom de domaine dans le sens inverse avec le tld en premier suivi du nom du projet mais cela peut aussi être autre chose totalement arbitraire. Attention, par-contre, tout comme un nom de package, par convention cela doit être entièrement en minuscule et séparé par des points.
- le nom de base de l’archive : Le fichier sera nommé ainsi suivi d’un tiret et de la version après compilation. On y mettra donc le nom du mod (il est possible d’y mettre des majuscules)
En dessous on retrouve le bloc minecraft, contenant les paramètres de mapping. On pourra choisir d’utiliser des mappings stables (versions publiées soccasionnellement) ou snapshot (génération automatique chaque jour). La liste des mappings est disponible sur le site dédié au bot mcp de bspk
Toujours dans ce bloc, il y a diverses configurations comme celle du transformateur d’accès (son utilisation sera traitée dans un autre tutoriel, il sert à changer la visibilité des variables de classes de Minecraft) ou encore celles des configurations de lancement (inutile d’y toucher).
Ensuite vient le bloc de dépendances. La première ligne non commentée commençant par
minecraft
gère la version de Forge. Elle pourra être changée ici par la suite, ce qui évitera de re-télécharger le MDK pour changer la version de Forge.
Toujours dans ce bloc, il est possible d’ajouter des dépendances, que ce soit des bibliothèques externes ou un autre mod. L’utilisation des dépendances sera traité en détails dans un tutoriel dédié à ce sujet.L’avant dernier bloc est celui gérant la création du jar. Par défaut, une configuration contrôlant le manifeste du jar est présente, il faudra changer la valeur de
Specification-Title
par l’identifiant du mod puisSpecification-Vendor
etImplementation-Vendor
par le fournisseur du mod (l’auteur du mod ou l’organisation gérant le mod).Enfin vient un dernier bloc gérant la publication du mod vers un dépôt maven. Par défaut il publie dans le dossier
mcmodsrepo
du dossier du projet, mais on peut également modifier ce script pour publier sur un dépôt distant.Fonctionnement des mappings
Note
Cette partie a pour but d’expliquer l’intérêt et le fonctionnement des mappings. Elle est optionnelle, mais cela peut toujours être intéressant de comprendre ces mécanismes.
Afin de protéger le code de Minecraft, Mojang offusque ce dernier : C’est-à-dire que les noms des classes, fonctions, variables et paramètres, normalement en anglais et lisibles pour un humain sont remplacé par un nom court et n’ayant aucun sens contextuel, comme a, b, abb, xy, etc. Ainsi, seul Mojang dispose du vrai code de Minecraft, ce qui empêche les gens de prétendre de disposer du code et d’en être propriétaire. Cela reste une protection surtout juridique, car comme on va le voir cela n’empêche pas de faire de la rétro-ingénierie (étudier le fonctionnement du code) de Minecraft.
Pour rendre la création de mod plus agréable et plus simple (cela ne serait pas très pratique d’avoir des
a
ou desb
comme nom de fonction dès qu’on appelle du code de Minecraft …), MCP (Minecraft Coder Pack) et les mappings ont été créés.
L’outil fonctionne en deux passes : une première va se charger de générer des noms uniques pour chaque variable / fonction / paramètre (car la variablea
dans la classeab
n’est pas la même que la variablea
de la classeac
) ce qui va aboutir sur des fonctions nomméesfunc_xxxx
, des variables nomméesfield_xxxx
et des paramètres nommés de la même façon (où xxxx est un nombre unique). Cette étape est automatique et tout est auto-généré.La deuxième passe consiste à remplacer tous ces
func_xxxx
,field_xxxx
, etc. par un nom anglais utile pour un développeur. Ce nom anglais ne peut pas être deviné automatiquement et est fait à la main par des bénévoles qui étudient le code de Minecraft pour trouver des noms en fonction du contexte.
Tous ces noms sont stockés dans des tableaux de correspondance : les mappings.Il est possible de les retrouver dans le dossier
$HOME/.gradle/caches/forge_gradle/maven_downloader/de/oceanlabs/mcp/
($HOME étant le dossier de la session,C:\Users\nom d'utilisateur\
sous Windows,/home/nom d'utilisateur
sous Linux et/User/nom d'utilisateur
sous MacOS) puis en allant dans le dossier mcp_snapshot ou mcp_stable et enfin dans la version correspondante. Les mappings au format CSV se trouvent dans l’archive ZIP.Choisir des mappings plus récentes permettra d’avoir moins de noms incompréhensibles dans le code de Minecraft.
Attention, en revanche, si des mappings conçus pour la 1.13.1 fonctionneront sans problème en 1.13.2 (ou encore, celles de la 1.14.3 fonctionnent en 1.14.4), la compatibilité n’est pas garantie entre les versions majeures (par exemple utiliser des mappings conçus pour la 1.14 en 1.13 n’est pas une bonne idée, comme certains noms de la 1.13 ne sont plus utilisés en 1.14, ils peuvent être retirés).Importation du projet
Maintenant la configuration de Gradle faite, il ne reste plus qu’à importer le projet dans l’IDE. Il suffit de lancer son IDE en choisissant un espace de travail au choix (par exemple celui par défaut) puis de suivre les étapes.
Dans Eclipse
Faites un clic droit à gauche dans l’explorateur de projet puis « Import… ». Dans la catégorie « Gradle », choisir « Existing Gradle Project » puis cliquer sur suivant et dans « Project root directory » choisir le dossier du MDK.
Enfin, cliquer sur « Finish » et il ne reste qu’à patienter. (Sous Windows, il faudra autoriser l’accès au réseau si le pare-feu le demande).
Une fois cette étape terminée, le projet sera visible dans l’explorateur de package. Pour le lancer, il va être nécessaire de générer les fichiers de lancement, en se rendant dans l’onglet « Gradle tasks » (sur la partie du bas d’Eclipse) puis en choisissant le dossier du projet et enfin en double cliquant sur « genEclipseRuns » dans la catégorie « fg_runs »
Après cela, il ne reste plus qu’à rafraîchir le projet (clic droit -> refresh sur le projet dans l’explorateur de package à gauche), les fichier
runClient.launch
etrunServer.launch
devraient être présents :
Sélectionner un de ces derniers puis cliquer sur la flèche verte lancera le jeu et l’ajoutera à la liste des configurations de lancement.
Note
Il est possible d’explorer le code de Minecraft en se rendant dans « Project and External Dependencies » puis dans le fichier jar de forge. Les différents packages de Minecraft et de Forge seront dedans, contenant les classes qui peuvent être ouvertes avec un simple double clic (les sources de ces classes sont liées, on voit donc directement un code lisible).
Dans Intellij Idea
La démarche est légèrement différente une fois que vous êtes sur cette fenêtre :
Il vous suffit de cliquer sur le bouton
Import Project
et de sélectionner lebuild.gradle
du dossier MDK.
Une fois fait, vous allez arriver sur cette fenêtre :Vous pouvez cocher la case
Use auto-import
, mais elle aura pour conséquence d’activer l’importation automatique dès que vous ferez la moindre modification dans lebuild.gradle
.Après avoir validé, il vous faudra attendre quelques minutes afin que le projet soit entièrement importé.
Une fois cette étape terminée, il faut lancer la commande
genIntellijRuns
présente dans le tableau de droite d’IDEA.
Pour cela, passer votre souris sur l’icone tout en bas à gauche puis sélectionnez Gradle :
Sur la partie gauche d’IDEA, la section gradle va s’ouvrir :
Ensuite, il vous suffit d’aller dans
Tasks
>fg_runs
>genIntellijRuns
et vous avez juste à double-cliquer dessus pour lancer la commande.Attention
La commande
genIntellijRuns
est à lancer à chaque changement de version de Forge.Vous attendez quelques minutes que la commande se termine et vous aurez généré les configurations de lancement pour le client et le serveur.
À l’heure où j’écris ces lignes, il faut modifier les configurations de lancement, pour ce faire, il faut cliquer sur
Edit Configurations...
:Ensuite, vous allez arriver sur cette fenêtre :
Vous ouvrez la partie
Application
, puis dansrunClient
etrunServer
, vous devrez affecter le module suivant :Vous appliquez les changements, puis cliquez sur
OK
et vous pourrez désormais lancer le jeu en client ou en serveur.Dans VS Code
Assurez-vous de bien avoir le pack d’extension Java puis importez le dossier du MDK en allant dans le menu « Fichier » puis « Ouvrir le dossier ».
L’extension Java va automatiquement détecter le fichier build.gradle et commmencer l’importation. La progression est visible tout en bas à gauche:
Une fois celle-ci terminée, allez sur le menu « Terminal » puis cliquez sur « Nouveau terminal ».
Dans ce dernier entrez la commande./gradlew genVSCodeRuns
puis patientez jusqu’à la fin.Tout est désormais en place pour le développement, vous pouvez lancez le jeu en vous rendant sur le menu debug (icône de scarabé à gauche) puis choisir la configuration à lancer (client ou serveur). Il est également possible de lancer le jeu en utilisant le raccourci clavier F5.
Licence et attribution
Ce tutoriel rédigé par @robin4002 et @Superloup10, corrigé par @BrokenSwing et publié sur 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
-
Ajout de VS Code & légère modification pour prendre en compte la 1.14.4.
-
Je n’ai pas ce que tu as
-
Salut, ton setup semble avoir mal été fait, essaye de redémarrer Idea et de rafraichir le projet Gradle s’il ne fait pas de lui-même.
-
Ce message a été supprimé ! -
Il y a un problème avec le certificat https donc il n’a pas réussi à setup l’environnement.
Tu as un anti-virus ? Si oui, lequel ? -
-
@robin4002 J’ai avast.
-
Si tu as la protection web / internet active, c’est probablement ça qui cause le problème de certificat.
Désactives avast le temps de faire l’importation gradle dans idea. -
Ce message a été supprimé ! -
Mon père à viré avast mais ça ne marche toujours pas…
-
Il y a toujours l’erreur
unable to find valid certification path to request target
? -
oui, qu’est-ce qu’elle dit exactement ?
-
Qu’il y a un problème de certificat https.
Tu as prit quelle version de forge ? -
la 1.14.4
-
Et tu n’as pas d’autres anti-virus ?
-
Windows Defender
-
Pas de problème avec celle-ci.
Je ne sais pas pourquoi tu as toujours cette erreur -
ah… donc pas de mods… c’est ça ?
avec mon père, hier, on avait cherché de l’aprem jusqu’au soir mais on a rien trouvé… (mon père est dev).
Pourtant sur son linux tout marcher niqel… -
Faudrait éventuellement demander ailleurs s’ils ont une idée du problème.
Ou alors tenter d’importer dans un autre IDE.