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.

TRtrolPublished 6 min read

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.

AnsatzKoexistiert mit anderen ModsÜberlebt ein Spiel-UpdateWird ausgeliefert als
Handbearbeitung des kompilierten SpielsNein, eine Abzweigung gewinntNein, bricht bei jeder ÄnderungEine vollständige modifizierte Jar-Datei
Mixin-InjektionJa, Patches stapeln sichOft, wenn die Methode überlebtEine 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.

AnnotationWas es tutWann man es verwendet
@InjectFührt Ihren Code an einem gewählten Punkt innerhalb einer Zielmethode ausStandard; am wenigsten invasiv, am updatefestesten
@RedirectErsetzt einen bestimmten Methodenaufruf innerhalb des ZielsTauscht 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 MethodePasst den Zustand an, den die Methode bereits berechnet hat
@OverwriteErsetzt eine gesamte MethodeLetzte 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

Besorge Terminus

Built on clean Mixin hooks, not a hacked-up jar.