Learn · frameworks
Qu'est-ce que Mixin ? L'injection de bytecode expliquée
Mixin est la bibliothèque d'injection de bytecode qui permet aux mods de modifier les classes compilées de Minecraft au moment du chargement. Voici comment fonctionne l'injection et pourquoi tous les mods modernes en ont besoin.
Qu'est-ce que Mixin dans Minecraft ?
Mixin est une bibliothèque d'injection de bytecode qui permet à un mod de modifier les classes compilées de Minecraft au moment du chargement, sans jamais toucher le code source original. Un mod écrit une petite classe qui indique « insérer ce code à cet endroit dans cette méthode de jeu », et Mixin tisse ce code dans le bytecode dès que la JVM charge la cible. Fabric l'utilise comme mécanisme de modding principal.
En résumé : Minecraft est fourni sous forme de classes Java compilées. Mixin traite ces classes compilées comme une surface sur laquelle vous construisez, et les modifie en mémoire avant que le jeu n'exécute un seul frame.
Comment fonctionne l'injection de bytecode de Mixin ?
Mixin fonctionne dans l'intervalle entre la compilation et l'exécution. La classe du jeu est déjà compilée, mais la JVM ne l'a pas encore chargée. C'est la fenêtre que Mixin utilise. Un mod remet au chargeur une classe Mixin annotée pour cibler une classe de jeu réelle, et lorsque cette classe de jeu est chargée, Mixin réécrit son bytecode à la volée pour intégrer le code du mod.
Les annotations sont tout l'art. Elles ne décrivent pas à quoi ressemble le fichier de jeu ligne par ligne. Elles décrivent où vous voulez atterrir : le début d'une méthode, la valeur de retour, un appel spécifique à l'intérieur, une variable locale. Mixin trouve cet endroit dans le bytecode et y insère vos instructions.
C'est nécessaire parce que Minecraft n'a jamais été conçu pour être étendu. Il n'existe pas d'API de plugin officielle pour la plupart des modifications que les mods souhaitent apporter. Mixin est la réponse à cela : si le jeu ne vous donne pas de point d'accroche, vous en créez un vous-même dans le code compilé.
Pourquoi les mods utilisent-ils Mixin plutôt que de modifier directement le jeu ?
Deux raisons soutiennent tout l'argument : la compatibilité et la survie des mises à jour.
Modifier directement le code source du jeu revient à distribuer une copie modifiée complète de Minecraft. Personne d'autre ne peut construire sur votre fork, et cela se brise dès que le jeu est mis à jour. Les correctifs Mixin sont petits et précis, ce qui signifie que des dizaines de mods peuvent tous modifier le même jeu à la fois sans avoir à distribuer une copie complète.
| Approche | Coexiste avec d'autres mods | Survit à une mise à jour du jeu | Livré sous forme de |
|---|---|---|---|
| Modifier manuellement le code compilé | Non, un seul fork gagne | Non, se brise à chaque modification | Un fichier jar modifié complet |
| Injection Mixin | Oui, les correctifs s'accumulent | Souvent, si la méthode survit | Quelques petites classes |
Cette deuxième colonne est le super pouvoir discret. Étant donné qu'un mixin dit "injecter ici" plutôt que "le fichier est exactement ceci", de nombreux mixins continuent de fonctionner sur différentes versions sans aucun changement. C'est la différence entre décrire une destination et mémoriser une carte.
Comment Mixin s'intègre-t-il à Fabric ?
Le Fabric repose sur Mixin, point final. Le chargeur lit la configuration Mixin de chaque mod, collecte les classes Mixin que cette configuration liste, et les transmet à Mixin afin qu'elles s'appliquent pendant le chargement des classes. Vous ne configurez rien de tout cela manuellement ; déclarer vos mixins dans la configuration est toute l'intégration.
Un mod Fabric typique est principalement constitué de ses propres classes normales, plus un petit ensemble de mixins qui interceptent les quelques méthodes du jeu qu'il doit réellement modifier. La logique réelle du mod réside dans le code normal. Les mixins ne sont qu'une fine couche qui prend le contrôle aux moments opportuns.
Quels sont les points d'injection Mixin les plus courants ?
Le type d'injection que vous choisissez détermine l'agressivité du patch et la façon dont il interagit avec les autres mods. Les interventions légères sont plus sûres et résistantes aux mises à jour. Les interventions plus lourdes vous offrent plus de contrôle, mais au prix d'une fragilité accrue.
| Annotation | Ce que cela fait | Quand l'utiliser |
|---|---|---|
@Inject | Exécute votre code à un point choisi à l'intérieur d'une méthode cible | Par défaut ; le moins invasif, le plus résistant aux mises à jour |
@Redirect | Remplace un appel de méthode spécifique à l'intérieur de la cible | Échanger un seul appel sans réécrire la méthode |
@ModifyArg | Modifie un argument transmis à un appel à l'intérieur de la cible | Ajuster une valeur entrant dans un appel |
@ModifyVariable | Réécrit une variable locale au milieu de la méthode | Ajuster l'état que la méthode a déjà calculé |
@Overwrite | Remplace une méthode entière | Dernier recours ; entre en conflit avec tout autre modificateur touchant cette méthode |
@Inject est le cheval de bataille car il est précis et respectueux. Il s'insère à un endroit précis et laisse le reste de la méthode intact, ce qui explique pourquoi il a tendance à survivre aux mises à jour et à rarement entrer en conflit avec d'autres mods. @Overwrite se situe à l'extrémité opposée : il détruit toute la méthode, de sorte que tout autre mod qui souhaite également cette méthode est perdu. Les bons mixins réduisent volontairement leur empreinte.
Un point d'injection propre explique aussi pourquoi la désinstallation d'un mod est instantanée. Rien n'a été gravé dans vos fichiers, donc supprimer le mod retire toutes les modifications avec lui.
Pourquoi Mixin est essentiel pour un client sérieux
C'est le fondement sur lequel Terminus est bâti. Un client utilitaire premium vit ou meurt selon la manière dont il s'intègre proprement au jeu, et Mixin permet cela sans livrer une copie massacrée de Minecraft. Des points d'injection précis maintiennent la compatibilité du client avec les mods que vous utilisez déjà, et ils résistent aux mises à jour du jeu au lieu de se briser à chaque correctif. Comprendre Mixin est le moyen le plus rapide de voir pourquoi un client bien conçu se fond dans le jeu plutôt que d'être un ajout fragile.
FAQ
Non. Mixin est une bibliothèque avec laquelle les mods sont créés, et non quelque chose que vous téléchargez séparément. Un lanceur comme Fabric inclut Mixin en interne et applique les mixins que chaque mod déclare lors du chargement du jeu.
Non. Toutes les modifications sont effectuées en mémoire pendant le chargement des classes. Le fichier jar sur le disque ne change jamais, c'est pourquoi la suppression d'un mod supprime complètement son comportement, sans laisser de traces.
Lorsque deux patchs modifient la même méthode de manière conflictuelle, l'un peut écraser l'autre. La cause habituelle est @Overwrite. Les mixins utilisant des points d'injection précis comme @Inject coexistent beaucoup plus sûrement.
Non. Mixin est un framework Java bytecode à usage général. Le modding de Minecraft est juste l'endroit où il est le plus utilisé, et l'adoption de Mixin par Fabric en a fait l'outil par défaut pour l'écosystème.
Obtenez Terminus
Built on clean Mixin hooks, not a hacked-up jar.