MFF

    Minecraft Forge France
    • Récent
    • Mots-clés
    • Populaire
    • Utilisateurs
    • Groupes
    • Forge Events
      • Automatique
      • Foncé
      • Clair
    • S'inscrire
    • Se connecter

    [1.15.X] Utiliser la classe ObfuscationReflectionHelper

    Planifier Épinglé Verrouillé Déplacé Tutoriels des membres
    4 Messages 3 Publieurs 580 Vues 3 Watching
    Charger plus de messages
    • Du plus ancien au plus récent
    • Du plus récent au plus ancien
    • Les plus votés
    Répondre
    • Répondre à l'aide d'un nouveau sujet
    Se connecter pour répondre
    Ce sujet a été supprimé. Seuls les utilisateurs avec les droits d'administration peuvent le voir.
    • TwiguinouT Hors-ligne
      Twiguinou
      dernière édition par

      Salut les moddeurs, l’API Forge met à disposition des utilisateurs un tas de petits outils permettant d’aller encore plus loin dans la modification du jeu. Ce tutoriel sera rédigé dans la version 1.15.2 de Minecraft pour faciliter la compréhension mais il n’est absolument pas réservé qu’à celle-ci.

      Sommaire

      • Principe de la classe
      • Savoir se servir des fonctions
      • Exemple d’utilisation
      • Conclusion
      • Licence et attribution

      Prérequis

      • Des connaissances correctes en Java

      Principe de la classe

      Cette classe, bien que très peu utilisée, permet d’accéder à des variables privées pour effectuer toutes sortes d’actions avec celles-ci. Il faut cependant faire très attention à respecter quelques règles pour éviter de créer des problèmes avec le fonctionnement de Minecraft. Nous allons dans ce tutoriel utiliser les deux méthodes les plus importantes de la classe et essayer de comprendre à quoi elles peuvent nous être utiles.

      Savoir se servir des fonctions

      La première méthode que nous allons voir, nommée sobrement getPrivateValue permet comme son nom l’indique de récupérer directement la variable d’une classe à partir d’une instance de celle-ci.

      A savoir que la classe n’utilise que des instances pour fonctionner.

      Le tout premier paramètre de la fonction représente simplement la classe qu’on souhaite accéder, le second représente une instance de cette dernière classe, et pour le dernier il faut rentrer le nom SRG de la variable. Ainsi la fonction vous retournera cette même variable et vous pourrez vous en servir comme bon vous semble.

      Si vous avez besoin de retrouver le nom SRG d’une variable ou d’une méthode je vous invite à aller voir les mappings MCP disponibles au téléchargement sur Internet ou encore dans les libraries de votre projet.

      Voici un petit exemple d’utilisation de la méthode.

      package com.twiguinou.tuto;
      
      import net.minecraft.client.Minecraft;
      import net.minecraft.client.renderer.entity.CowRenderer;
      import net.minecraft.client.renderer.entity.LivingRenderer;
      import net.minecraft.client.renderer.entity.layers.LayerRenderer;
      import net.minecraft.client.renderer.entity.model.CowModel;
      import net.minecraft.entity.passive.CowEntity;
      import net.minecraftforge.fml.common.ObfuscationReflectionHelper;
      
      import java.util.List;
      
      public class ClientProxy {
          
          public void client() {
              Minecraft mc = Minecraft.getInstance();
              List<LayerRenderer<CowEntity, CowModel<CowEntity>>> layerRenderers = ObfuscationReflectionHelper.getPrivateValue(LivingRenderer.class, new CowRenderer(mc.getRenderManager()), "field_177097_h");
              /*
              * Je peux par exemple ajouter un LayerRenderer sur la vache! Attention à bien utiliser cette fonction sur le bon côté ( client / serveur )
               */
          }
          
      }
      

      Poursuivons avec la seconde fonction. Celle-ci est plus intéressante, elle permet de modifier la valeur associée à une variable, et non pas d’en récupérer simplement le contenu qu’elle soit privée ou finale, par la même occasion et comme avec la précédente fonction cette même variable restera libre de modification durant toute la durée de vie du programme.
      Donc cette méthode setPrivateValue va prendre cette fois-ci quatre paramètres qui sont les suivants:

      • La classe à accéder
      • Une instance de celle-ci
      • La nouvelle valeur de la variable
      • Le nom SRG de la variable

      Voici un autre exemple d’utilisation de la méthode.

      package com.twiguinou.tuto;
      
      import net.minecraft.client.Minecraft;
      import net.minecraft.client.renderer.entity.CowRenderer;
      import net.minecraft.client.renderer.entity.LivingRenderer;
      import net.minecraft.client.renderer.entity.model.CowModel;
      import net.minecraft.entity.passive.CowEntity;
      import net.minecraftforge.fml.common.ObfuscationReflectionHelper;
      
      public class ClientProxy {
      
          public void client() {
              Minecraft mc = Minecraft.getInstance();
              ObfuscationReflectionHelper.setPrivateValue(LivingRenderer.class, new CowRenderer(mc.getRenderManager()), new CowModel<CowEntity>(), "field_77045_g");
              /*
              * Ceci n'est qu'un exemple, faire ceci n'aura absolument aucun effet sur le modèle de l'entité.
               */
          }
      
      }
      

      Ce ne sont bien évidemment pas les seules fonctions disponibles dans la classe, il en existe bien d’autres mais j’ai décidé de ne vous présenter que les plus utiles.

      Exemple d’utilisation

      Si ces méthodes peuvent sembler légèrement abstraites dans un mod, les possibilités qu’offre ces dernières peuvent servir à beaucoup d’applications.
      Voici quelques exemples d’utilisation de ces deux méthodes permettant de modifier complétement, et sans event le modèle du joueur:
      2020-05-26_15.50.23.png
      2020-05-26_15.48.25.png

      Conclusion

      Bien que très performantes, les méthodes de cette classe ne doivent pas être utilisées en masse car cela peut poser un tas de problèmes de compatibilité avec d’autres mods, c’est pour ça que Forge met à disposition des events pour faciliter les choses. Je vous invite donc à utiliser cette classe seulement si vous savez ce que vous voulez faire avec.

      Licence et attribution

      88x31.png
      Ce tutoriel rédigé par Twiguinou et 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

      1 réponse Dernière réponse Répondre Citer 5
      • ZomZDZ Hors-ligne
        ZomZD
        dernière édition par

        Super tutoriel, très intéressant et utile ^^ !

        1 réponse Dernière réponse Répondre Citer 0
        • TwiguinouT Hors-ligne
          Twiguinou
          dernière édition par

          Merci beaucoup ! D’autant plus que c’est mon premier donc j’ai essayé d’être le plus précis possible dans ce que je disais.

          1 réponse Dernière réponse Répondre Citer 0
          • Mysterious_DevM Hors-ligne
            Mysterious_Dev
            dernière édition par

            Ouais très bon tuto bravo.

            Adore taper sur les moddeurs 1.7.10.

            1 réponse Dernière réponse Répondre Citer 0
            • 1 / 1
            • Premier message
              Dernier message
            Design by Woryk
            ContactMentions Légales

            MINECRAFT FORGE FRANCE © 2024

            Powered by NodeBB