Astuce: Faire tourner Minecraft sur un Mac M1 (ARM)

Il y a bientôt un an, Apple a annoncé la production de son propre processeur, la puce M1 (avec ses dérivées M1 Max et M1 Pro annoncés en octobre dernier, et d’autres qui viendront plus tard probablement). Étant spécifiquement conçue pour leurs ordinateurs, cette nouvelle puce permet de grandement améliorer les performances des logiciels qui l’exploitent, tout en restant compatible avec les anciens logiciels grâce à un programme de “traduction” appelé Rosetta.

Pour la partie technique : chaque logiciel, lorsqu’il est produit par leurs développeurs, est compilé de manière à pouvoir s’exécuter sur un processeur et un OS spécifiques. Jusque là les Mac utilisaient un processeur Intel, très classique, il “suffisait” donc de prévoir les spécificités de macOS, rien de très compliqué. Mais avec leur nouveau processeur, c’est tout le langage de communication entre le logiciel et l’ordinateur qui change, ce qui signifie une toute nouvelle manière de compiler.
Apple a donc mis au point un système qui traduit les applications prévues pour Intel en code lisible par leur puce M1, ce qui permet de donner un peu de temps aux développeurs pour s’adapter au changement d’architecture. Mais cette traduction se faisant à la volée, elle réduit les performances des logiciels de manière non négligeables. Le but est donc d’utiliser une version dudit logiciel qui soit conçue pour tourner sur une puce M1, pour éviter de passer par le système de traduction et donc d’optimiser un maximum les performances.

Mais en quoi cela nous concerne-t-il pour Minecraft ? Car malheureusement Mojang Studio n’a pas encore conçu de version du jeu pour les puces M1 en particulier, donc que les performances sont nettement moins bonnes si vous jouez sur un de ces nouveaux ordinateurs d’Apple.
A titre d’exemple, je suis passé d’un Mac Mini 2018 (Intel) à un Mac Mini 2020 (M1), et pour la même quantité de RAM et la même version du jeu (1.16), j’ai vu mes fps moyens baisser d’environ 1/3 lors du chargement de mondes. En revanche, en adaptant le jeu pour utiliser le nouveau processeur, j’ai pu voir un net gain de fps par rapport à mon ancien ordinateur. Si vous êtes intéressé par cet exemple, regardez donc la dernière partie de cette astuce.
 

Comment savoir si mon Mac possède un processeur M1 ?

Vous pouvez vérifier sur la liste officielle de tous les appareils actuellement commercialisés ayant un processeur made by Apple. Mais vous pouvez également le savoir directement depuis votre Mac: cliquez sur le menu de la Pomme (en haut à gauche de votre écran) puis “À propos de ce Mac”, pour y trouver la ligne “Puce” indiquant si oui ou non vous avez une puce M1. Si vous avez marqué “Intel” à la place, alors aucun problème, vous n’avez pas besoin de lire plus loin !

Exemple avec mon propre ordinateur :

 

Quelles versions de Minecraft sont compatibles avec cette optimisation ?

A l’heure actuelle, malheureusement je n’ai pas pu trouver les ressources suffisantes pour les versions inférieures à la 1.14.

Les versions 1.12 et inférieures ne semblent pas permettre la modification des arguments de lancement via le fichier JSON, et la version 1.13 utilise encore une ancienne version de la library LWJGL, qui ne possède pas de version compilée pour les processeurs M1. Les seules versions concernées par cette astuce sont donc les versions 1.14 et supérieures.

Installer les composants

Pour faire tourner Minecraft en natif (donc prévu pour le M1), il faut commencer par trouver une version de Java prévue et compilée pour la nouvelle architecture, en l’occurrence l’ARM. Il existe actuellement assez peu de versions de Java prévue pour les puces ARM, mais la plus connue s’appelle “Azul Zulu” (cliquez pour aller sur leur site web).
Il vous suffit de sélectionner dans le menu la bonne version de Java (8 pour 1.14-1.16, 16 pour 1.17+), le système “macOS”, l’architecture “ARM 64-bits”, et pouf vous pouvez télécharger le JDK, qui permet d’exécuter Java sur votre ordinateur en natif.

Vous pouvez ouvrir le fichier compressé et extraire le dossier “zulu-16.jdk” (ou “zulu-11.jdk”) pour le placer à votre convenance, par exemple dans votre dossier Documents.

Le dossier Zulu une fois décompressé, avec le sous-dossier zulu-16.jdk qui nous intéresse

La prochaine étape consiste à télécharger les libraries Java utilisées par Minecraft, notamment pour le rendu graphique, qui doivent être compatibles avec votre nouvelle version de Java (donc ARM). Fort heureusement, un utilisateur de macOS propose ces fichiers en téléchargement sur Google Drive (regardez ici si le lien du Drive est mort). Comme précédemment, vous pouvez ouvrir le fichier compressé et déplacer le dossier là où vous voulez, probablement à côté de votre nouveau Java.

Le dossier MCAppleSilicon une fois décompressé, avec les deux éléments intéressants en bleu

 

Modifier la version de Minecraft

Maintenant que vous avez toutes les cartes en main, il est temps d’annoncer à votre jeu que les règles changent. Ou plus exactement, qu’il va devoir utiliser d’autres composants de Java que ceux habituels.

Pour commencer, assurez-vous d’avoir déjà lancé au moins une fois le jeu comme d’habitude dans la version que vous souhaitez. Dans mon exemple je vais modifier la version 1.17.1 (qui nécessite, pour rappel, Java 16). Ensuite, il vous faut aller dans le dossier Minecraft (~/Library/Application Support/minecraft), puis le dossier versions, et dupliquer le dossier de la version qui vous intéresse en le renommant (par exemple 1.17.1-arm). Il vous faudra renommer les deux fichiers contenus dans ce dossier de la même manière (1.17.1-arm.jar et 1.17.1-arm.json).

Dossier versions de Minecraft, avec la version source et la version modifiée en bleu

Dans le fichier JSON que vous venez de renommer, plusieurs choses sont à modifier :

  • Il y a un attribut “id”: “1.17.1” (ou autre, selon la version que vous modifiez) ; renommez-le avec le nom du dossier (“id”: “1.17.1-arm” dans mon exemple)
  • Le fichier contient aussi un attribut “libraries” ayant une liste de plein d’autres objets ; il vous faudra parcourir cette liste et supprimer toutes les entrées faisant référence à “lwjgl”
  • Enfin, il faut modifier les arguments de lancement de l’application : pour les trouver, cherchez la ligne contenant “-cp” au début du fichier ; il faut remplacer la ligne juste après par les arguments suivants : "<CHEMIN_VERS_lwjglfat>/lwjglfat.jar:${classpath}",
    "-Dorg.lwjgl.librarypath=<CHEMIN_VERS_lwjglnatives>/",
    "-Dfml.earlyprogresswindow=false"
    (en modifiant CHEMIN_VERS_lwjglfat par le chemin vers le fichier libraries/lwjglfat.jar, et CHEMIN_VERS_lwjglnatives par le chemin vers le dossier lwjglnatives, tous deux contenus dans le dossier “MCAppleSilicon” téléchargé dans la première partie)

Et voilà, votre version du jeu est prête !

Extrait du fichier JSON 1.17.1 après modification

Si vous voulez utiliser  Forge , Optifine ou F abric de manière native aussi, la technique est la même, mis à part le fichier JSON qui, étant bien plus court, ne possède que deux attributs à modifier :

  • “id” comme précédemment
  • “inheritsFrom” qui doit rediriger vers la version vanilla que vous venez de modifier (“1.17.1-arm” dans mon exemple).

Extrait du fichier JSON de Fabric 1.17.1 après modification

Préparer le launcher Minecraft

Pour profiter pleinement de votre version modifiée, lancez le launcher Minecraft (ou redémarrez-le s’il était encore ouvert), allez dans l’onglet “Configurations”, créez une nouvelle configuration (ou modifiez-en une existante), puis :

  • Pour l’option Version : sélectionnez votre version modifiée (“release 1.17.1-arm” dans mon cas)
  • Cliquez sur l’onglet “Plus d’options”, puis modifier l’exécutable Java pour pointer vers le fichier Contents/Home/bin/java du dossier zulu-16.jdk installé dans la première partie

Enregistrez votre configuration, et vous êtes bons, vous pouvez lancer Minecraft en natif ARM en utilisant toute la puissance de votre nouveau processeur !

Exemple de configuration du launcher officiel

Vous pouvez vérifier que votre logiciel utilise du code natif en lançant l’application utilitaire “Moniteur d’activité”, puis en regardant la colonne Type : si c’est “Apple”, vous avez gagné.

Pour les autres clients

  • CurseForge, qui a son propre launcher depuis sa séparation de Twitch, ne semble pas supporter ce genre de manipulation
  • Lunar propose directement de télécharger une version de son client optimisée pour les puces M1
  • MultiMC permet de modifier la version de Java et les libraries utilisées directement depuis son interface graphique. Voyez ce guide (anglais) pour le détail des manipulations
  • Badlion a annoncé en 2020 qu’ils prévoyaient une version pour Mac M1, bien qu’à ce jour elle ne soit toujours pas disponible

Bon en vrai, à quel point ça aide les performances ?

Voici un exemple sur une map vierge en 1.17.1, je me suis mis en spectateur pour générer un maximum de chunks.

Voilà le résultat sans optimisation :

Et après avoir suivi ce tuto :

De même une fois tous les chunks chargés, sans bouger, ici sans optimisation :

Et la même avec les optimisations de Java :

Ce n’est bien entendu pas représentatif de tout le gameplay, mais la différence est suffisament intéressante pour être notée. Notez aussi que le simple affichage de cet écran de debug, avec ses graphiques, entraine une perte de fps assez importante.

Source