[JAVA] Contexte et mécanisme de Fabric-loader

Cible

Comment Fabric-loader a été créé

1. Problèmes avec les chargeurs de mod existants

Les chargeurs de mod existants tels que Forge ont un mécanisme qui vous permet de décompiler directement Minecraft pour obtenir le code source et ajouter facilement des éléments au Minecraft décompilé. Cette méthode avait l'avantage (pour les développeurs de modloader) que le modloader pouvait jouer avec tout le code source de Minecraft, mais elle avait un problème majeur. La décompilation de Minecraft est compliquée et vous ne pouvez même pas essayer de recompiler le décompilé. Ceci est en partie dû à un bogue dans le décrypteur lui-même, mais c'est inévitable car certaines informations sont perdues au moment de la compilation (comme les génériques). Ce problème a retardé le développement du modloader.

2. Naissance de SpongePowered / Mixin (cadre Mixin)

Pour faire simple, le framework Mixin est un groupe de fonctions qui vous permettent de jouer avec le code source sans décompiler. Le fichier de classe contient toutes les informations sur les classes Java, mais il est particulièrement difficile de décompiler le traitement à l'intérieur de la méthode. Inversement, si vous pouvez jouer avec le code source sans décompiler le traitement à l'intérieur de la méthode, il n'y a pas de problème. Le framework Mixin rend cela possible avec les étapes suivantes:

  1. Analyser les informations dans les fichiers de classe (classes, variables membres, méthodes)
  2. Créez une classe wrapper pour la classe analysée.
  3. Pour la classe analysée, remplacez tous les objets nouvellement créés par ceux de la sous-classe.
public class Player {
  public void kill() {
    ...
  }
}
public class Main {
  public static void main(String[] args) {
    Player player = new Player();
    player.kill();
  }
}

Supposons que vous ayez une classe de joueur (dont la méthode kill est inconnue) et une classe principale qui l'utilise, comme indiqué ci-dessus. Vous êtes convaincu que tuer la méthode kill rendra le joueur immortel, et vous voulez profiter du framework Mixin pour tuer la méthode kill. À ce stade, vous commencez par "Mixer" la classe Player. Les classes suivantes sont créées par "Mixin".

public class Player$1 extends Player {

  private final Player player;

  public Player$1(Player player) {
    this.player = player;
  }

  public void kill() {
    player.kill();
  }
}

De plus, la classe principale peut être réécrite comme suit par "Mixin".

public class Main {
  public static void main(String[] args) {
    Player$1 player = new Player$1(new Player());
    player.kill();
  }
}

Vous pouvez voir que la classe Player $ 1 qui encapsule la classe Player a été créée et que le nouveau dans la classe principale a été réécrit. Alors, comment se débarrasser de la méthode kill? La réponse est simple.


public class Player$1 extends Player {

  private final Player player;

  public Player$1(Player player) {
    this.player = player;
  }

  public void kill() {
    //player.kill();
  }
}

J'ai pu supprimer le traitement de la méthode kill simplement en commentant une ligne. C'est facile! Certes, avec cette méthode, il semble facile de supprimer le traitement de la méthode ou d'ajouter un traitement avant et après la méthode.

Qu'est-ce que Fabric-loader?

Le chargeur Fabric se compose des deux parties suivantes.

J'ai dit que vous pouvez facilement changer le traitement d'une méthode par "Mixin", mais il y a en fait quelques restrictions. L'une des plus grandes restrictions est que les classes chargées ne peuvent pas être modifiées. Donc, Fabric-loader modifie le fichier de paramètres Minecraft (version .json) afin que le mod ne soit pas exécuté directement lorsque Minecraft est lancé à partir du lanceur, mais via Fabric-loader. Ajuste Minecraft pour qu'il s'exécute une fois qu'il a été chargé et "Mixiné".

Qu'est-ce que l'API Fabric?

L'API Fabric est une collection de parties communes utilisées dans de nombreux mods tels que l'ajout de blocs et l'ajout d'éléments. L'API Fabric fonctionne également avec Fabric-loader. De plus, il n'y a rien de tel que l'API Fabric soit absolument nécessaire pour la création de mod, et des mods célèbres tels que Sodium, Phospher, Lithium, etc. fonctionneront sans l'API Fabric (au contraire, s'il existe une API Fabric, ils interféreront les uns avec les autres et fonctionneront). Certains mods ne fonctionnent pas).

Recommended Posts

Contexte et mécanisme de Fabric-loader
Apprenez le mécanisme rudimentaire et l'utilisation de Gradle 4.4
Configuration de JMeter et jEnv
Résumé de FileInputStream et BufferedInputStream
Mécanisme de commande et outils de gestion
Combinaison de recherche et each_with_index
Jugement de JSONArray et JSONObject
Opérateur résiduel et puissance (冪 puissance)
Avantages et inconvénients de Java
Mécanisme et caractéristiques de la classe d'implémentation Collection souvent utilisés en Java
Bases du branchement conditionnel et du retour
Comprendre le mécanisme de base de log4j2.xml
À propos de Biocontainers fastqc et Java
Mécanisme de référence Java (pile et tas)
Utilisez redirect_to et effectuez un rendu correctement
Ceci et cela de JDK
[Swift] Avantages et inconvénients de Storyboard
Utilisation correcte de Mockito et PowerMock
[Rails] Différences et utilisation de each_with_index et each.with_index
À propos de removeAll et de retentionAll de ArrayList
Implémentation par défaut de Object.equals () et Object.hashCode ()
Application des méthodes downcase et slice
Ceci et cela du contrôle exclusif