[JAVA] Hintergrund und Mechanismus des Stoffladers

Ziel

Wie Fabric-Loader erstellt wurde

1. Probleme mit vorhandenen Mod Loadern

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.

2. Geburt von SpongePowered / Mixin (Mixin-Framework)

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:

  1. Analysieren Sie Informationen in Klassendateien (Klassen, Mitgliedsvariablen, Methoden).
  2. Erstellen Sie eine Wrapper-Klasse für die analysierte Klasse.
  3. Ersetzen Sie für die analysierte Klasse alle neu erstellten Objekte durch die der Unterklasse.
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.

Was ist Fabric-Loader?

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.

Was ist die Fabric-API?

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

Hintergrund und Mechanismus des Stoffladers
Lernen Sie den rudimentären Mechanismus und die Verwendung von Gradle 4.4 kennen
Einrichten von JMeter und jEnv
Zusammenfassung von FileInputStream und BufferedInputStream
Befehlsmechanismus und Verwaltungstools
Kombination von Suche und jedem_mit_Index
Urteil von JSONArray und JSONObject
Rest- und Leistungstreiber (冪 Leistung)
Vor- und Nachteile von Java
Mechanismus und Merkmale der in Java häufig verwendeten Collection-Implementierungsklasse
Grundlagen der bedingten Verzweigung und Rückkehr
Verstehen Sie den grundlegenden Mechanismus von log4j2.xml
Über Biocontainer fastqc und Java
Java-Referenzmechanismus (Stack und Heap)
Verwenden Sie redirect_to und rendern Sie richtig
Dies und das von JDK
[Swift] Vor- und Nachteile von Storyboard
Ordnungsgemäße Verwendung von Mockito und PowerMock
[Rails] Unterschiede und Verwendung von each_with_index und each.with_index
Informationen zu removeAll und RetainAll von ArrayList
Standardimplementierung von Object.equals () und Object.hashCode ()
Anwendung von Downcase- und Slice-Methoden
Dies und das der ausschließlichen Kontrolle