Learn · frameworks
Was ist Mixin? Bytecode-Injektion erklärt
Mixin ist die Bibliothek zur Bytecode-Injektion, mit der Mods die kompilierten Klassen von Minecraft zur Ladezeit patchen können. Hier erfahren Sie, wie die Injektion funktioniert und warum jedes moderne Mod sie benötigt.
Was ist Mixin in Minecraft?
Mixin ist eine Bibliothek zur Bytecode-Einspritzung, die einem Mod ermöglicht, die kompilierten Klassen von Minecraft zur Ladezeit zu patchen, ohne jemals den ursprünglichen Quellcode zu berühren. Ein Mod schreibt eine kleine Klasse, die sagt: „Füge diesen Code an diesem Punkt in dieser Spielmethode ein“, und Mixin verwebt diesen Code in den Bytecode, sobald die JVM die Zielklasse lädt. Fabric verwendet es als seinen zentralen Modding-Mechanismus.
Die Kurzversion: Minecraft wird als kompilierter Java-Code ausgeliefert. Mixin behandelt diese kompilierten Klassen als die Oberfläche, auf der Sie bauen, und bearbeitet sie im Speicher, bevor das Spiel einen einzigen Frame ausführt.
Wie funktioniert Mixins Bytecode-Einspritzung?
Mixin arbeitet in der Lücke zwischen Kompilieren und Ausführen. Die Spielklasse ist bereits kompiliert, aber die JVM hat sie noch nicht geladen. Das ist das Fenster, das Mixin nutzt. Ein Mod übergibt dem Lader eine Mixin-Klasse, die darauf ausgelegt ist, eine echte Spielklasse anzusprechen, und wenn diese Spielklasse geladen wird, schreibt Mixin ihren Bytecode im Flug um, um den Code des Mods einzufügen.
Die Annotationen sind der ganze Trick. Sie beschreiben nicht, wie die Spieldatei Zeile für Zeile aussieht. Sie beschreiben wo Sie landen möchten: den Anfang einer Methode, die Rückgabe, einen bestimmten Aufruf darin, eine lokale Variable. Mixin findet diesen Punkt im Bytecode und fügt Ihre Anweisungen darum ein.
Das ist notwendig, weil Minecraft nie zur Erweiterung konzipiert wurde. Es gibt keine offizielle Plugin-API für die meisten Änderungen, die Mods vornehmen möchten. Mixin ist die Antwort darauf: Wenn dir das Spiel keinen Haken gibt, schnitzt du dir einen in den kompilierten Code.
Warum verwenden Mods Mixin anstatt das Spiel direkt zu bearbeiten?
Zwei Gründe tragen die gesamte Argumentation: Kompatibilität und Update-Überleben.
Bearbeite den Quellcode des Spiels direkt, und du musst eine vollständige modifizierte Kopie von Minecraft ausliefern. Niemand sonst kann auf deiner Abzweigung aufbauen, und sie zerbricht, sobald das Spiel aktualisiert wird. Mixin-Patches sind klein und präzise, was bedeutet, dass Dutzende von Mods gleichzeitig dasselbe Spiel patchen können, ohne eine vollständige Kopie zu versenden.
| Ansatz | Koexistiert mit anderen Mods | Überlebt ein Spiel-Update | Wird ausgeliefert als |
|---|---|---|---|
| Handbearbeitung des kompilierten Spiels | Nein, eine Abzweigung gewinnt | Nein, bricht bei jeder Änderung | Eine vollständige modifizierte Jar-Datei |
| Mixin-Injektion | Ja, Patches stapeln sich | Oft, wenn die Methode überlebt | Eine Handvoll kleiner Klassen |
Diese zweite Spalte ist die stille Superkraft. Denn ein Mixin sagt "füge hier ein" anstatt "die Datei ist genau dies", funktionieren viele Mixins über Versionen hinweg ohne Änderungen. Das ist der Unterschied zwischen der Beschreibung eines Ziels und dem Auswendiglernen einer Karte.
Wie passt Mixin in Fabric?
Stoffe basieren auf Mixin, Punkt. Der Loader liest die Mixin-Konfiguration jedes Mods, sammelt die Mixin-Klassen, die in dieser Konfiguration aufgeführt sind, und übergibt sie an Mixin, damit diese während des Klassenladens angewendet werden. Sie müssen nichts davon manuell einrichten; die Deklaration Ihrer Mixins in der Konfiguration ist die gesamte Integration.
Ein typischer Fabric-Mod besteht hauptsächlich aus den eigenen, normalen Klassen, plus einer kleinen Anzahl von Mixins, die in die wenigen Spielmethoden eingreifen, die er tatsächlich ändern muss. Die eigentliche Logik des Mods befindet sich in regulärem Code. Die Mixins sind lediglich die dünne Schicht, die die Kontrolle in den richtigen Momenten übernimmt.
Welche sind die gängigen Mischin-Einspritzpunkte?
Der von Ihnen gewählte Einspritztyp bestimmt, wie aggressiv das Patch ist und wie gut es mit anderen Mods harmoniert. Leichtere Eingriffe sind sicherer und updatefest. Schwerere Eingriffe geben Ihnen mehr Kontrolle, allerdings auf Kosten der Stabilität.
| Annotation | Was es tut | Wann man es verwendet |
|---|---|---|
@Inject | Führt Ihren Code an einem gewählten Punkt innerhalb einer Zielmethode aus | Standard; am wenigsten invasiv, am updatefestesten |
@Redirect | Ersetzt einen bestimmten Methodenaufruf innerhalb des Ziels | Tauscht einen einzelnen Aufruf ohne Neuschreiben der Methode |
@ModifyArg | Ändert ein Argument, das an einen Aufruf innerhalb des Ziels übergeben wird | Ändert einen Wert, der in einen Aufruf einfließt |
@ModifyVariable | Überschreibt eine lokale Variable mitten in der Methode | Passt den Zustand an, den die Methode bereits berechnet hat |
@Overwrite | Ersetzt eine gesamte Methode | Letzte Option; kollidiert mit allem, was die Methode ebenfalls verändert |
@Inject ist das Arbeitstier, weil es präzise und höflich ist. Es platziert sich an einem genauen Punkt und lässt den Rest der Methode in Ruhe, was genau der Grund dafür ist, dass es Updates überlebt und selten mit anderen Mods in Konflikt gerät. @Overwrite steht am anderen Ende: es vernichtet die gesamte Methode, sodass jeder andere Mod, der ebenfalls diese Methode möchte, verliert. Gute Mischin-Mods halten ihren Fußabdruck absichtlich klein.
Ein sauberer Injektionspunkt ist auch der Grund, warum das Entfernen eines Mods sofort erfolgt. Nichts wurde in deine Dateien gebrannt, sodass das Entfernen des Mods alle Änderungen mit sich zieht.
Warum Mixin für einen ernsthaften Kunden wichtig ist
Dies ist das Fundament, auf dem Terminus basiert. Ein Premium-Utility-Client lebt oder stirbt danach, wie sauber er in das Spiel eingreift, und Mixin macht dies möglich, ohne eine verstümmelte Kopie von Minecraft ausliefern zu müssen. Eng definierte Injektionspunkte sorgen dafür, dass der Client mit den Mods kompatibel bleibt, die Sie bereits verwenden, und halten auch dann stand, wenn das Spiel aktualisiert wird, anstatt bei jedem Patch zu versagen. Das Verständnis von Mixin ist der schnellste Weg, um zu erkennen, warum ein gut entwickelter Client sich wie ein Teil des Spiels anfühlt und nicht wie ein brüchiges Add-on.
FAQ
Nein. Mixin ist eine Bibliothek, mit der Mods erstellt werden, nicht etwas, das man separat herunterlädt. Ein Loader wie Fabric enthält Mixin intern und wendet die Mixins an, die jeder Mod deklariert, wenn das Spiel geladen wird.
Nein. Das Patchen geschieht vollständig im Speicher während des Ladens der Klassen. Die Jar-Datei auf der Festplatte ändert sich nie, weshalb das Löschen eines Mods sein Verhalten vollständig entfernt und nichts zurücklässt.
Wenn beide Klassen die gleiche Methode auf kollidierende Weise überschreiben, kann eine die andere überschreiben. Der übliche Übeltäter ist @Overwrite. Mixins, die enge Injektionspunkte wie @Inject verwenden, koexistieren deutlich zuverlässiger.
Nein. Mixin ist ein Java-Bytecode-Framework für allgemeine Zwecke. Minecraft-Modding ist zwar der Bereich, in dem es am häufigsten eingesetzt wird, aber die Standardisierung von Fabric darauf hat es zum Standardwerkzeug für das Ökosystem gemacht.
Besorge Terminus
Built on clean Mixin hooks, not a hacked-up jar.