Utiliser les Access Transformer
-
Sommaire
Introduction
Il vous est déjà arrivé de ne pas avoir accès à une méthode ou une variable ? C’est énervant n’est-ce pas ? Et bien voici comment modifier son accès.
ATTENTION ! Lisez d’abord cette partie avant d’attaquer le tutoriel
Il existe 2 méthodes pour accéder aux variables non-accessibles, la 1ere consiste à utiliser la classe ObfuscationReflectionHelper, la 2eme méthode est celle présentée ici. Cette méthode ne doit être appliquée seulement si vous accédez souvent à la variable en question, si vous y accédez une fois au démarrage (par exemple) il est inutile d’utiliser cette méthode.
Pré-requis
Code
build.gradle :
La première chose que nous allons faire c’est spécifié à forge que l’on utilise l’access transformer, pour cela copiez ce code dans votre build.gradle en remplaceant le nom du fichier par ce que vous voulez (ce doit être le même après et il doit finir en _at.cfg) :
jar { manifest { attributes 'FMLAT': '<modid>_at.cfg' } }
Maintenant allez dans votre dossier de resources (par défaut src/main/resources), créez un dossiez “META-INF” et dedans créez un fichier texte du même nom que specifié avant.
Voici comment nous allons structurer le fichier :
# Je suis un commentaire <visibilité><chemin vers la classe> <nom obfusqué de la variable> # pattern pour une variable (par convention, on met le nom non-obfusqué après le "#") <visibilité><chemin vers la classe> <nom obfusqué de la méthode>(<paramètres>) <type retourné># pattern pour une fonction (par convention, on met le nom non-obfusqué après le "#")
La visibilité correspond à la visibilité que vous voulez (généralement public).
Le chemin vers la classe est tout simplement <package>.<classe>, par exemple pour la classe EntityRenderer ce serait net.minecraft.client.renderer.EntityRenderer
Le nom obfusqué correspond au nom de la variable ou de la méthode mais obfusquée, pour accéder au nom je vous conseille mon logiciel ObfuscatedNameFinder
Pour ce qui est des paramètres et du type retourné, c’est plus compliqué.
Pour les paramètres il faut mettre à la suite sans espace tous les types de paramètre.
Pour le type retourné, il faut simplement le type.Voici les différents types disponibles :
- void devient “V”
- boolean devient “Z”
- char devient “C”
- byte devient “B”
- short devient “S”
- int devient “I”
- float devient “F”
- long devient “J”
- double devient “D”
- pour tous les autres type, c’est :
L<lien vers la classe (en remplacent les points par des slashs)>;
par exemple pour le type String ce serai “Ljava/lang/String;”
Si vous voulez changer toutes les variables d’une classe, il faut faire ceci :
<visibilité><chemin vers la classe> *
Pour changer toutes les méthodes d’une classe, il faut faire ceci :
<visibilité><chemin vers la classe> *()
Une fois que vous avez modifié toutes vos variables et vos méthodes, faites un gradlew setupDecompWorkspace eclipse pour mettre à jour les classes
Un exemple est disponible sur le github de mon mod tutoriel
Crédits
Rédaction :
- SCAREX
Correction :
Ce tutoriel de SCAREX publié sur Minecraft Forge France est mis à disposition selon les termes de la licence Creative Commons Attribution - Pas d’Utilisation Commerciale - Partage dans les Mêmes Conditions 4.0 International -
Tiens tu aime bien gradle décidément Sinon c’est vrai que ça peut être vraiment utile
-
Ahhhh….Pour moi les Access Transformer, c’était pouvoir accéder aux méthodes du jeu, et les patcher de manière à rajouter ce que l’on veut, où l’on veut dedans
Sa, je savais déjà faire ^^ -
patcher le jeu en profondeur c’est manipulation de byte code avec asm + plugin fml.
-
Sa fera l’objet d’un tutoriel sur le fofo ou pas ? J’irai demander ça en message dans le poste “Proposition de tutoriels”
-
@‘BrokenSwing’:
Tiens tu aime bien gradle décidément Sinon c’est vrai que ça peut être vraiment utile
C’est pas en rapport avec gradle la, c’est du fml.
@‘Plaigon’:
Sa fera l’objet d’un tutoriel sur le fofo ou pas ? J’irai demander ça en message dans le poste “Proposition de tutoriels”
Je comptais aussi faire un tuto la dessus mais j’ai pas encore les connaissances pour.
-
Erreur lors du gradlew setupDecompWorkspace, une idée ? Je continue mes recherches…
public net.minecraft.world.biome.BiomeDecorator func_150513_a(Lnet/minecraft/world/biome/Biome;Lnet/minecraft/world/World;Ljava/util/Random;)V #genDecorations(PS = En 1.10.2, l’AT file est bien register dans mon build.gradle, si tu penses que cela vient de là je te filerai le fichier)