Bestehende Mod-Loader wie Forge verfügen über einen Mechanismus, mit dem Sie Minecraft direkt dekompilieren können, um den Quellcode zu erhalten und dem dekompilierten Minecraft problemlos Elemente hinzuzufügen. Diese Methode hatte den Vorteil (für Modloader-Entwickler), dass der Modloader mit dem gesamten Minecraft-Quellcode in Konflikt geraten konnte, hatte jedoch ein großes Problem. Das Dekompilieren von Minecraft ist kompliziert und Sie können nicht einmal versuchen, das dekompilierte zu kompilieren. Dies ist teilweise auf einen Fehler im Entschlüsseler selbst zurückzuführen, ist jedoch unvermeidbar, da einige Informationen beim Kompilieren verloren gehen (z. B. Generics). Dieses Problem verursachte eine Verzögerung bei der Modloader-Entwicklung.
Einfach ausgedrückt ist das Mixin-Framework eine Gruppe von Funktionen, mit denen Sie mit dem Quellcode spielen können, ohne ihn zu dekompilieren. Die Klassendatei enthält alle Informationen zu Java-Klassen, es ist jedoch besonders schwierig, die Verarbeitung innerhalb der Methode zu dekompilieren. Wenn Sie dagegen mit dem Quellcode spielen können, ohne die Verarbeitung innerhalb der Methode zu dekompilieren, gibt es kein Problem. Das Mixin-Framework ermöglicht dies mit den folgenden Schritten:
public class Player {
public void kill() {
...
}
}
public class Main {
public static void main(String[] args) {
Player player = new Player();
player.kill();
}
}
Angenommen, Sie haben eine Spielerklasse (deren Kill-Methode unbekannt ist) und eine Hauptklasse, die sie verwendet, wie oben gezeigt. Sie sind zuversichtlich, dass das Töten der Kill-Methode den Spieler unsterblich macht, und Sie möchten das Mixin-Framework nutzen, um die Kill-Methode zu töten. Zu diesem Zeitpunkt "mischen" Sie zuerst die Player-Klasse. Die folgenden Klassen werden von "Mixin" erstellt.
public class Player$1 extends Player {
private final Player player;
public Player$1(Player player) {
this.player = player;
}
public void kill() {
player.kill();
}
}
Die Hauptklasse kann auch wie folgt durch "Mixin" umgeschrieben werden.
public class Main {
public static void main(String[] args) {
Player$1 player = new Player$1(new Player());
player.kill();
}
}
Sie können sehen, dass die Player $ 1-Klasse, die die Player-Klasse umschließt, erstellt wurde und dass die neue Klasse in der Hauptklasse neu geschrieben wurde. Wie werden Sie die Kill-Methode los? Die Antwort ist einfach.
public class Player$1 extends Player {
private final Player player;
public Player$1(Player player) {
this.player = player;
}
public void kill() {
//player.kill();
}
}
Ich konnte die Verarbeitung der Kill-Methode löschen, indem ich nur eine Zeile auskommentierte. Es ist einfach! Mit dieser Methode scheint es sicherlich einfach zu sein, die Verarbeitung der Methode zu löschen oder die Verarbeitung vor und nach der Methode hinzuzufügen.
Der Fabric Loader besteht aus den folgenden zwei Teilen.
Ich sagte, dass Sie die Verarbeitung einer Methode leicht durch "Mixin" ändern können, aber es gibt tatsächlich einige Einschränkungen. Eine der größten Einschränkungen besteht darin, dass geladene Klassen nicht geändert werden können. Daher ändert Fabric-Loader die Minecraft-Einstellungsdatei (Version .json) so, dass der Mod nicht direkt ausgeführt wird, wenn Minecraft vom Launcher aus gestartet wird, sondern über Fabric-Loader. Passt Minecraft so an, dass es ausgeführt wird, nachdem es geladen und "gemischt" wurde.
Die Fabric-API ist eine Sammlung allgemeiner Teile, die in vielen Mods verwendet werden, z. B. zum Hinzufügen von Blöcken und zum Hinzufügen von Elementen. Die Fabric-API funktioniert auch mit Fabric-Loader. Es gibt auch keine Möglichkeit, ob die Fabric-API für die Mod-Erstellung unbedingt erforderlich ist, und berühmte Mods wie Natrium, Phospher, Lithium usw. funktionieren ohne die Fabric-API (im Gegenteil, wenn es eine Fabric-API gibt, stören sie und funktionieren Einige Mods funktionieren nicht).
Recommended Posts