Skip to content

Instantly share code, notes, and snippets.

@ZRunner
Last active September 3, 2021 15:46
Show Gist options
  • Save ZRunner/98cb94bf6d2addbb48fed85081560f7e to your computer and use it in GitHub Desktop.
Save ZRunner/98cb94bf6d2addbb48fed85081560f7e to your computer and use it in GitHub Desktop.
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. É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 ? Eh bien, tout simplement que 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 tout 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 ?

Eh bien, déjà il y a une liste officielle de tous les appareils actuellement commercialisés ayant un processeur made by Apple. Et si vous voulez être vraiment sûr, vous pouvez, depuis votre Mac, cliquer 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 : A propos de ma bête

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'occurence 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" 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élecharger 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-dossuer zulu-16.jdk qui nous intéresse Zulu 16 décompressé

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 ci-dessus 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 McAppleSilicon

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 une autre version de Java que celle habituelle.

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 MC versions

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 de votre 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" ; il faut ajouter juste après ce -cp 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 après modification Fichier JSON 1.17 modifié

Si vous voulez utiliser Forge, Optifine ou Fabric 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, et "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 Fichier JSON Fabric modifié

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 !

Aperçu de votre configuration

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é.

Capture d'écran du moniteur d'activité

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
  • MutiMC 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 ?

Eh bien, je ne suis pas spécialiste en benchmarking, mais j'ai pris une map vierge en 1.17.1, et je me suis mis en spectateur pour générer un max de chunks.

Voilà le résultat sans optimisation : 2021-08-31_16 07 43

Et après avoir suivi ce tuto : 2021-08-31_16 01 57

Ce n'est bien entendu pas représentatif de tout le gameplay, mais la différence me semble quand même être assez intéressante pour être notée.

Sources :

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment