... et donc, depuis 2 ou 3 mois maintenant, je fais du modding pour Minecraft. Rien de public, il s'agit surtout de découvrir les dessous de ce jeu si populaire dans une nouvelle facette.

Minecraft est un jeu vraiment unique. Dans le jeu de base, il offre déjà des expériences variées : mode survie ou mode créatif, seul ou à plusieurs, terminer l'aventure ou s'amuser à construire,... Le modding du jeu ouvre des expériences encore plus grandes. Je pense même que, pour parodier une règle célèbre, si quelque chose existe, alors cela existe dans Minecraft.

Les mods apportent des jeux d'aventure, des jeux compétitifs, des modifications mineures ou complètement exubérantes, tant côté client que serveur.

C'est d'autant plus extraordinaire que Minecraft ne supporte pas, tel quel, le modding. Les créateurs n'ont jamais offert d'API qui permette de se greffer au moteur de jeu pour le modifier. Mais la popularité du jeu a comblé cette partie en offrant des solutions alternatives.

Les premières fois où je me suis intéressé aux mods, côté joueur, les méthodes étaient nombreuses et très artisanales, à cause de modification à la main des .jar officiels. Les .jar sont les archives contenant les programmes compilés en Java, le langage dans lequel est programmé Minecraft. C'était lourd, sujet à l'erreur et il était plutôt difficile de faire cohabiter plusieurs mods entre eux.

Tout cela a vite évolué, et le boulot de décorticage est impressionnant. Aujourd'hui, globalement, les mods se font sur la base de Minecraft Forge, un système qui allie d'une part, côté utilisateur, le patch des exécutables de Minecraft afin d'y ajouter de quoi charger des Mods, et côté Moddeur, un environnement complet de développement. De ce côté, Minecraft est décompilé, patchée, les symboles générés par la décompilation sont renommés en des termes lisibles. Il y a un sacré boulot de fait !

Côté communauté de moddeurs, c'est très actifs, voire fouilli. Il y a beaucoup d'informations, beaucoup invalides ou imprécises, pas mal de dépassées (Minecraft ne supportant pas officiellement ses modifications, il n'y a pas de stabilité d'API assurée) mais aussi beaucoup de contenu de qualité. C'est un peu la partie difficile pour démarrer : arriver à trier ce qui est intéressant de ce qui ne l'est pas vraiment. Or pour arriver à faire ce tri, connaître un peu le fonctionnement de Minecraft aide.

Avoir une expérience de programmation jeu vidéo aide pas mal à repérer les bonnes volontés qui écrivent des renseignements parfois recopiés sans avoir été vraiment compris, de ceux qui donne les quelques renseignements qui éclairent tout.

Car les profiles des moddeurs sont très variés. Comme Minecraft touche un public assez jeune, il y a beaucoup de débutants en programmation. Et c'est cool de débuter la programmation dans un environnement aussi intéressant. Ce qui se complique, c'est quand les débutants se recopient entre eux. Ou prennent le code décompilé de Minecraft comme argent comptant et imitent les structures qui y a sont trouvées.

Or, premièrement, comme dans tout moteur en production (tout ceux que j'ai pu voir et avec lesquels j'ai travaillé), il n'y pas que de belles choses. Parfois, c'est là car ça fonctionne et on n'y touche plus. Et deuxièmement, le code décompilé mêlé aux patchs de Forge donnent des résultats parfois pas forcément jolis jolis.

Au final, j'ai parfois un peu les yeux qui saignent... mais tout le monde débute un jour. Mais je m'étonne qu'il y ait aussi peu de moddeurs parmi ceux qui ont de l'expérience qui, au fil des tutoriels, ne donnent pas quelques conseils sur la programmation en elle-même, en expliquant les choix qui sont faits et pourquoi pas en décortiquant certaines structures ou certains choix de Minecraft. Enfin, je m'étonne... c'est du temps à y passer pour un article qui n'aura pas forcément le même succès qu'une explication clés en main de comment créer une armure indestructible.

De mon côté, pour mes études de l'univers des mods Minecraft, très rapidement, j'ai cherché une alternative à la programmation en Java. Mes mauvais souvenirs les plus anciens en Java remontent en 1996 environ. Et dans les 20 années qui ont suivies, chacune de mes rencontre avec Java a été aussi brève que possible mais toujours trop longue à mon goût. J'en ai refait un peu sérieusement autour d'Android 1.6. J'en ai refait très brièvement en 2015 pour du Android plus récent. J'ai régulièrement regardé du côté de Scala, ou de Groovy, pour aborder le monde JVM sans toucher à Java lui-même. Mais sans plus.

En début d'année 2016, au détour d'excursions sur le site de Jetbrains, dont j'utilise certains outils régulièrement (la suite d'outils C# ainsi que CLion), j'ai été intrigué par le langage : Kotlin. Jetbrains est une boite qui fait des outils en Java depuis quelques années, et ces outils ont deux grandes particularités. La première, c'est qu'ils sont top ! La seconde, c'est qu'ils sont bien foutus et n'ont pas les caractéristiques extérieures des programmes Java non maitrisés. En bref, Jetbrains sait faire du Java et connaît le monde JVM. S'ils proposent une alternative à Java, ça mérite le coup d'oeil.

Et je suis bien content d'avoir jeté ce coup d'oeil. Kotlin est une bonne formule. Beaucoup d'emprunts à Java et C#, forcément. Beaucoup, beaucoup de nettoyage du superflu de Java et un support via les outils de refactoring/génération de code. C'est très agréable à écrire, c'est concis, c'est travaillé. La réclame indique même que l'on pourrait faire des mods Minecraft avec !

Je m'y suis donc lancé. Sauf que... Kotlin est assez peu utilisé, vraiment très peu, pour faire du Modding Minecraft. Les informations sont donc lacunaires. À cela j'ai du ajouter l'apprentissage de Gradle, qui semble être la nouvelle marotte dans le monde JVM côté outils de construction, en remplacement de Maven. La courbe d'apprentissage a été un peu rude au début.

Pour être certain de comprendre ce que je fais, je conduits deux projets en simultané. Le premier est le mod que j'ai en tête, un projet complet avec des objectifs de jeu, qui me permet d'avoir un cap et d'aller découvrir et comprendre les différents éléments de Minecraft dont j'ai besoin. Le second projet est un mod exemple, un peu vide, sur lequel je peux écrire des articles qui m'obligent à mettre bien à plat ce que j'ai compris.

J'ai donc généralement une première phase de bricolage dans le mod/jeu, ou j'essaie des choses. Puis, lorsque ça fonctionne, une phase de reproduction au propre sur le mod/example, en réduisant les étapes au minimum et en vérifiant que ce que je fais a du sens. L'écriture d'un article au passage, autant pour moi que pour quiconque sera intéressé. Puis je reporte la version propre dans le mod/jeu.

Je ne sais pas encore si ce mod/jeu donnera quelque chose d'intéressant. C'est un des objectifs, l'autre étant de mettre à jour mes connaissances du monde JVM et de fouiller dans un moteur de jeu que je ne connaissais pas. Tout cela dans le cadre d'une communauté sympathique de moddeurs que je remercie au passage pour l'aide fournie.