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.
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:
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.
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é".
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