>> La recherche se fait sur tous les élements du jeu Minecraft <<
Aidez nous a financer le site: Joignez l'utile à l'agréable et profitez d'FR-Minecraft sans publicités en devenant VIP ! Ou ajoutez FR-Minecraft dans vos exceptions, nous n'abusons pas des pubs
Aidez nous a financer le site: Joignez l'utile à l'agréable et profitez d'FR-Minecraft sans publicités en devenant VIP ! Ou ajoutez FR-Minecraft dans vos exceptions, nous n'abusons pas des pubs

[MàJ] Minecraft Java s'ouvre à la communauté, mais Bedrock se ferme

Le 06/09/2019 à 7h00
Aidez nous a financer le site: Joignez l'utile à l'agréable et profitez d'FR-Minecraft sans publicités en devenant VIP ! Ou ajoutez FR-Minecraft dans vos exceptions, nous n'abusons pas des pubs

Mise à Jour 10/09: Il semblerai que la fermeture de Bedrock soit intentionnelle, plus d'infos en fin de news.

Souvenez vous, il y a 8ans et demi, alors que Mojang cherchait un moyen efficace pour créer une API de Modding pour Minecraft (Java), Notch annonça que le code source de Minecraft serait ouvert, sous condition, au moddeur, pour leur permettre de faire leur mods dans les meilleurs condtions possibles. Mais le code source ne fut jamais ouvert, l'API de modding jamais développée, et la situation ne bougeât que très peut pendant toutes ces années.

La problématique des mods
Beaucoup de jeu supporte les mods, et la problématique est toujours la même: comment intégré un programme externe (le mod) dans le jeu, afin qu'il puisse en modifier le fonctionnement ?
Dans la plupart des cas, le fonctionnement est simple: les créateurs du jeu propose une API de modding, des outils intégré dans le jeu qui chargent les mods et les exécute (c'est le cas des mods en lua par exemple, très courant dans les jeux indépendants).

Mais lorsque les créateurs du jeu ne propose pas d'API de modding, la situation se complique. Parfois la communauté de fan créé des outils permettant de modifier les dépendence du jeu (ressources), ou plus complexe, d'altérer le fonctionnement du jeu directement en mémoire, ce qui est particulièrement complexe et dangeureux (risque de crash). Pour Minecraft Java la situation est plus simple, grâce a une spécificité de Java: le bytecode.

Un peu de technique, c'est quoi le bytecode ?
Lorsqu'un developpeur créer un logiciel (jeu ou autre), il l'écrit dans un language de programmation. Ce language est facilement comprehensible pour les humains, mais pas par la machine. Pour que ce programme puisse être executer il faut le traduire dans un language comprehensible par l'ordinateur, c'est ce qu'on appelle la compilation. Une fois compilé, le code devient tellement complexe qu'il est très difficile a comprendre pour un humain (et plus le logiciel est gros, plus c'est complexe, pour devenir rapidement totalement impossible a comprendre). Tous les processeurs ne fonctionne pas de la même façon, ils ne proposent pas les mêmes opérations de base, n'ont pas les mêmes bus de données (32 ou 64 bits), etc. donc pour chaque famille de processeur il faut recompiler le logiciel, pour qu'il soit compris par le processeur en question, c'est pourquoi lorsqu'on télécharge un logiciel, souvent on doit choisir l'OS (windows, mac, etc.), 32 ou 64 bits, etc. Java a voulu régler ce problème d'architecture, en ne proposant qu'une seule et unique version du logiciel qui fonctionne partout, et pour cela il ont créer d'une part une VM (Machine Virtuelle), qui elle est compilée spécifiquement pour le processeur de la machine, et d'autre part un compilateur particulier, qui ne compile pas le logiciel pour le processeur cible, mais dans un language intermédiare que l'on appel le bytecode: Le bytecode n'est pas exécutable directement par le processeur, c'est la VM Java qui va terminer la compilation lors de l'exécution du logiciel pour permettre au processeur de l'exécuter. Ainsi tous les fichiers Java au format .jar peuvent être exécutés sur n'importe quelle plateforme, c'est la VM Java qui traduire automatiquement le bytecode en code binaire compréhensible par le processeur.


Et puisque le fichier jar n'est pas un logiciel totalement compiler, il est beaucoup plus facile de le "décompiler", c'est a dire de transformer le bytecode en code source, il existe même des logiciels qui font cela automatiquement. C'est un risque que les créateurs de logiciel connaissent bien, et pour se protéger de la décompilation de leur logiciel (et donc du risque de vol ou de modification), ils ont créés un parade: l'obfuscation

Encore un peu de technique, c'est quoi l'obfuscation ?
l'obfuscation est une étape faite durant la compilation d'un logiciel, afin de rendre le logiciel difficilement décompilable. Différentes techniques permettent cela, mais la principale consiste à renommer toutes les variables, méthodes, classes, etc. avec des noms aléatoires (Si une classe s'appelle "Enchantement", durant la décompilation il sera facile de savoir a quoi elle sert, mais si après obfuscation elle s'appelle "bgx", ça devient beaucoup plus complexe, surtout quand il y a des milliers de classe mélangées avec des noms aléatoires). Appliquez ces mêmes changements a tous les éléments nommés, ajoutez à cela que la compilation supprime déjà naturellement tous les commentaires du codes qui pourrait aider à la comprehension, et ajoutez encore a cela certaines techniques permettant de transformer certaines structures de code et quelques chose de plus complexe à comprendre, et vous obtenez un logiciel obfusqué, difficilement décompilable (plus précisément difficilement compréhensible après décompilation), donc difficilement modifiable, et donc difficilement moddable.


Le modding dans Minecraft
Mais difficilement décompilable ne signifie pas impossible: avec un peut d'effort on arrive a reconnaitre des structures de code, et même a retrouver des infos, c'est d'ailleurs en lisant le code obfusqué décompilé de Minecraft que je met a jour a chaque version le calculateur d'enchantement de Minecraft.tools). Ainsi la communauté s'est attaqué à cette lourde tâche que de comprendre le code obfusqué de Minecraft, pour établir des tables de traduction des noms obfusqués vers le nom originale supposé, pour permettre au moddeur de comprendre le code source de Minecraft, pour leur permettre de le modifier, et de faire leur mods. Différent projets permettairent de faire cela, certains dédiés pour la version serveur (hmod, bukkit, etc), d'autres pour la version cliente: c'était le fameux projet MCP, gèré par un certain Searge, que vous connaissez très probablement déjà.

Oui, c'est le même Searge que Mojang a recruté pour travailler sur Minecraft, et avec le temps Searge à donc eut de plus en plus de mal a mettre à jour son projet MCP, et peut a peut la communauté s'est retrouvée démunie, puisque MCP mettait de plus en plus de temps à être mis à jour, sachant que dans le même temps, l'équipe de Minecraft Java, de plus en plus grande, modifiait de plus en plus les fichiers du jeu, ce qui imposait des mises à jour de ces tables de traductions de plus en plus complexe et donc longue, le modding était en train de mourir.

Mojang a probablement compris la stupidité de la situation: pourquoi continuer à obfusquer le code source de Minecraft, et dans le même temps encourager la communauté à faire ces tables de traductions pour pouvoir déobfusquer ce même code ???

C'est ainsi que le 4 septembre 2019 fut un évènement majeure pour la communauté, la snapshot 19w36a, sortie ce jour la, fut la première version de Minecraft avec laquelle est fournit directement par Mojang la table quasi complète de traduction pour la déobfuscation ! Cette table reprendre tous les noms de classes, méthodes, attributs et constantes utilisés dans le jeu, en donnant le nom avant et après obfuscation:

Le fichier contient une correspondance par ligne, il est donc particulièrement long: plus de 65 000 lignes de traductions de noms! Ce fichier est le plus complet jamais reçu par la communauté (car les traductions communautaires n'ont jamais était complète). Il est ainsi possible de retrouver simplement notre classe d'enchantement qui j'ai donnée dans l'exemple précédent:

La classe Enchantement s'appelle, une fois obfusqué, "bgx". Ce fichier donne également les espaces de nommages (namespace), le nom des méthodes de classes, des constantes d'enum et des attributs, mais ils ne donnent pas les noms de variables dans les méthodes, ni le nom des paramètres de méthodes (qui sont pourtant eux aussi obfusqué). C'est dommage, car les fichiers de traduction utilisé par la communautés auparavant traduisaient également ces éléments, mais Searge confirme qu'ils ne seront pas ajouté.

Ce fichier est d'autant plus important pour les moddeurs qu'il ne suffit pas de comprendre le code de Minecraft pour pouvoir faire un mod: il faut également réobfusquer le mod avec la même table d'obfuscation pour le rendre compatible avec le jeu. Grâce à la fourniture de cette table par Mojang il deviendra beaucoup plus simple pour les moddeurs de recompiler leurs mods pour Minecraft !


Minecraft open source ?
Contrairement a ce qu'on à pu entendre dans la communauté, Minecraft ne devient pas open source, Minecraft reste à source fermé, Microsoft interdit toujours l'accès au code source (Pourquoi je dit Microsoft ? J'explique dans quelques lignes), et il est toujours interdit de publier le code source de Minecraft. Rappelons que ce n'est pas le code source du jeu qui est publié, mais une méthode permettant de simplifier sa décompilation et surtout sa recompilation pour y inclure des mods, mais le code décompilé ne sera jamais identique au code original, ne nombreux éléments ne sont pas traduit, et le code décompilé inclu certaines optimisations et transformations non présente dans le code original, enfin le code décompilé n'inclu aucun commentaire du code source original. Et ce n'est pas un premier pas vers le fin de l'obfuscation, Searge est clair sur ce point: Minecraft continuera d'être obfusqué.

La tables d'obfuscation n'est pas non plus facilement accessible par les joueurs lambda, il faut savoir bidouillé un minimum pour y accéder: il faut d'abord ouvrir le fichier de configuration json de la version du jeu, puis en lisant ce fichier (si possible après l'avoir unminifyé pour le rendre plus lisible) y trouver la ligne "client_mappings":

C'est ici qu'est donné le lien de téléchargement de la table d'obfuscation, nottez que 2 liens sont disponible: un pour la version cliente, et un pour la version serveur !

Mais Microsoft protège malgré tout sa propriété intellectuelle, puisque la première ligne du fichier de mapping est un avertissement de copyright au nom de Microsoft:

Traduction:

Tous droits réservés. Ces informations sont fournies "en l'état" et vous prenez le risque de les utiliser. Ces informations ne vous confèrent aucun droit légal sur la propriété intellectuelle d'aucun produit Microsoft. Vous pouvez copier et utiliser ces informations pour un usage personnel. Microsoft n'offre aucune garantie, express ou implicite, concernant les informations fournies ici.

Bien que cette sortie annonce la fin du projet MCP de Searge, il est très probable que la commauté créer très rapidement de nouveaux projet permettant de décompiler et de déobfusquer Minecraft automatiquement, comme le faisant MCP auparavent.

Espérons que cela redonne un nouveau souffle dans la communauté de Modding, je ne serait pas étonné si de nombreux mods sortaient pour la version 1.15 de Minecraft :-)


Et pendant ce temps, sur Minecraft Bedrock
La problématique sur Minecraft Bedrock est très différente, Minecraft Bedrock ne fonctionne pas sur Java, il est compilé en langage natif pour chaque plateforme, le modding est donc beaucoup plus complexe, et la décompilation est totalement impossible. C'est pourquoi Mojang a créé sur Minecraft Bedrock une API de modding, permettant de créer des mods simple. Mais cette API est de type "data driven" (c'est à dire uniquement basé sur des fichiers de configuration, avec très peu de code source), ce qui limite considérablement les possibilités (on est limité avec les options proposés). Et même s'il est maintenant possible d'ajouter du code dans les mods, les possibilités de personnalisations restent infiniment plus limités que sur Minecraft Java. Mais la communauté a contourné le problème en utilisant une autre astuce de la version Bedrock: depuis toujours la version Bedrock est compilé et distribué avec les symboles de debugage. Ces données peuvent être vue comme l'équivalent du fichier de déobfuscation de l'édition Java, il permettent de connaitre la structure du projet, les classes et méthodes, ainsi que leur nom. Ils sont normallement utilisé pour débugger le projet, mais la communauté a utilisée ces données pour créer des outils tiers: des mods et surtout les serveurs multijoueurs.

Hors, dans les dernières versions Beta sorties récemment, ces informations de debuggage ont été supprimé du jeu, il n'est donc plus possible pour la communauté de mettre à jour les mods et serveurs multijoueurs (et encore moins en créer de nouveau). La communauté se fait entendre de plus en plus fort pour comprendre cette réaction de Mojang, pourquoi vouloir tuer la communauté de Minecraft Bedrock ???

Serait-ce bientot la fin des serveurs multijoueurs sur Minecraft Bedrock (autres que les 4 inclus dans le jeu) ? Serait la fin des mods qui n'utilisent pas l'API officielle ?

Pour le moment Mojang n'a donné aucune information officielle à ce sujet, il est donc tout a fait possible qu'il s'agisse d'une erreur (par exemple un oublie lors de la pulication du jeu sur les plateformes de téléchargement).

Dinnerbone, qui est le Directeur Technique de Minecraft (ce qui inclu l'édition Java mais aussi l'édition Bedrock) à fini par répondre aux rumeurs: Il n'a pas d'informations à annoncer à ce sujet, il faudra donc encore attendre, qu'il en sache plus et/ou qu'une décision définitive soit prise.

Mise à Jour 10/09: D'après des sources indirectes (dktapps, développeur de PocketMine-MP, qui indique avoir plusieurs contacts chez Mojang qui confirment ses dires), il semblerai que la fermeture de Bedrock soit intentionnelle. Bien entendu Mojang/Microsoft ne souhaite pas la fin des serveurs multijoueurs, la véritable raison de ce choix serait la lutte contre le piratage de Minecraft Bedrock, Mojang aurait donc supprimé les informations de débogage du jeu pour rendre la vie des pirates moins facile.
Malheureusement, cette décision (qui n’empêchera évidement pas le piratage) a comme effet collatéral de compliquer énormément le modding et le développement des serveurs multijoueurs. Espérons que cette décision ne soit pas définitive.
Cet article a été publié par Tronics, le 2019-09-06 07:00:00. Source
Validé par  Tronics. Dernière modification par  Tronics le 10/09/2019 à 22:43.
Partager :
Commentaires de la news Minecraft
[MàJ] Minecraft Java s'ouvre à la communauté, mais Bedrock se ferme :
Tronics (administrateur)
le 06/09/2019 à 07:13
Merci à Franswa pour son aide pour la partie sur l'édition Bedrock :-)
franswa (rédacteur)
le 06/09/2019 à 07:41
En reflechissant au sujet, j’ai eu une autre hypothèse : Je l’avais pas mentionné dans la news initiale, mais vien qu’on ait plus les ressources de la declinaison PS4, on a toujours les fichiers de structure de l’interface qui y font toujours référence, preuve que la sortie de l’edition PS4 est pour bientôt, peut-être à l’issue de la minecon live. Or, Sony étant extrêmement strict sur le cross-plateforme, je suis pas certains qu’ils auraient apprécié que des joueurs mobile pouvant modder leur jeu puissent se retrouver face à leurs joueurs. Le blocage du modding natif était peut-être une condition sine qua non au feu vert de sony.
le 06/09/2019 à 12:00
Vraiment super intéressant cet article. N'étant pas modduer mais mapmaker on comprend mieux la complexité et pourquoi j'ai décidé surtout de faire mapmaker plutôt que moddeur haha. Enfin depuis Minecraft 1.13 maintenant tu as tellement de possibilités pour laisser libre court à ton imagination et créer de nouvelles choses que moddé est devenu de moins en moins utiles.
Par exemple quand tu vois que Sethbling ce qu'il fait, il a créé world Edit en utilisant uniquement les commandes de minecraft en function, et nous de notre côté on créé un pur RPG avec uniquement des functions etc...
Certes on a parfois les mains liés mais ce qui a tué les mods dans Minecraft c'est surtout les commandes blocs ^^.

Sinon c'est toujours intéressant de comprendre et voir l'évolution qu'adopte Mojang et maintenant Microsoft. Je savais en commençant à faire des maps il y a 10 ans de cela déjà que Minecraft allait rentrer dans l'histoire du jeu vidéo et surtout continuer à vivre pendant un moment. On annonce toujours la mort de Minecraft etc... mais à chaque fois il renaît comme la période qu'on est entrain de vivre où tout le monde se remet sur le jeu.

Bref la version Java restera le Minecraft originel et tout le garde en mémoire, Mojang fait du très bon boulot et ils ont comprit la pépites qu'ils ont entre les mains contrairement à Microsoft qui n'a été là que pour se faire du fric.
Wearn (anonyme)
le 06/09/2019 à 15:31
"auX moddeurS, pour leur"/"au moddeur, pour LUI", "très peu-", "beaucoup de jeuX supporteNT", "comment intégrER"
Vraiment j'adore ce site et le supporte de tout mon coeur, mais prenez 5min pour vous aérer la tête après la rédaction d'una article aussi gros, et le relire un coup après. Je sais parfaitement qu'on ne peut pas faire autant de contenu sans quelques coquilles, mais là c'est basique et dans les 2 premiers paragraphes.
Bon courage pour la suite et merci pour les news.
le 06/09/2019 à 15:45
Merci pour l'article très instructif et détaillé ;)
reddemoon (staff)
le 06/09/2019 à 18:08
Très bonne news et bien détaillée ! :-)

Piccomaster : Il manque encore pas mal de choses pour les mapmakers également mais Mojang a fait beaucoup d'efforts là dessus ces derniers temps et il y a toujours des alternatives. En tout cas j'ai hâte pour ATT2 ! :D

Wearn : Pour l'orthographe on ne peut jamais tout voir. Surtout que les news sont souvent rédigées sur notre temps de sommeil. Regarde juste l'heure de publication par rapport a la longueur de la News. ;-)
Donc on fait au mieux avec notre temps sans toujours tout relire. (Car après la journée on travail ^^)
le 06/09/2019 à 18:11
Attention aux erreurs et aux verbes laissés à l'infinitif ?!
Sinon très bon article ;)
le 07/09/2019 à 07:54
Je suis incapable de comprendre pourquoi Microsoft s'entête à continuer à obfusquer Minecraft alors qu'ils fournissent les tables de désobfuscation. C'est comme vérouiller sa porte d'entrée en gardant la clé dans la serrure.
le 07/09/2019 à 23:10
@Lattyange : j'avoue que c'est très con...
mais bon, il y a certainement une question de droit et de propriété...
SozoKa (staff)
le 08/09/2019 à 09:53
C'est assez stupide de rendre encore plus compliqué la tache aux moddeurs sachant que si Minecraft est aussi puissants aujourd'hui c'est aussi grâces aux mods et aux serveurs... À l'époque on disait que minecraft Bedrock serait le Java killer, mais maintenant ils sont en train de le détruire. Déjà qu'avant je n'y jouait pas (parce que Java est bien plus agréable) c'est définitivement fini pour moi.
le 08/09/2019 à 15:37
Ok j'installe forge 1.15 dès qu'il sort. J'ai hâte de voir les nouvelles idées des moddeurs et tout ce qui peux faciliter leur travail de quelque façon que ce soit est une très bonne chose(même si je ne my connais pas).
Sinon super article vous assurez toujours autant les gars ;-)
Sry (anonyme)
le 08/09/2019 à 23:08
@Lattyange raison purement légales et de principes

Vous devez être connecté pour laisser un commentaire.