Ajouter un nom au dessus de votre mob


  • Administrateurs

    Aujourd'hui dans ce tutoriel nous allons apprendre à ajouter un nom au dessus de notre mob.
    Voici un petit screen d'exemple :

    J'utilise lokoise comme exemple car je fais parti du développement de ce mod créer par @Thibrex.

    Trêve de blablaterie, et passons au sommaire !
    #–SOMMAIRE--(--SOMMAIRE--)

    1. Les pré-requis
    2. Ce qu'il nous faut dans notre entity
    3. Côté Render !

    #Les pré-requis(Les pré-requis)
    Pour ce tutoriel, il vous faut tout d'abord une entité classique (une base quoi) et un render !
    Si vous n'avez pas ces conditions pour ce tutoriel, je vous invite à aller voir mon tutoriel sur la base des mobs ici.

    #Ce qu'il nous faut dans notre entity(Ce qu'il nous faut dans notre entity)
    Pour commencer, nous allons déclarer un String que nous allons appeler "mobName" :

    public String mobName;
    

    Ensuite, dans le constructeur de votre entité, initialisez votre variable comme ceci :

    mobName = "Le nom à faire apparaître au dessus du mob !";
    

    On a déjà fini ?!
    -Pour la partie entity oui 🙂

    #Côté Render !(Côté Render !)
    Nous arrivons à la phase finale de ce tutoriel : Le RENDU ! ^^

    Je tiens juste à vous préciser que cette partie est la plus complexe du tutoriel, car c'est la partie du rendu qu'il faut toujours se douter qu'elle sera la plus complexe. 😉 (Je généralise en fonction de ce genre de choses.)

    Pour commencer, vous devez ajouter cette méthode quelque part dans votre render :

    public void renderNomDeVotreMobA(EntityNomDeVotreMob entity, double d, double d1, double d2, float f, float f1)
    {
    }
    

    Remplacez "NomDeVotreMob" par le nom de votre mob. (Ah oui, ne supprimez pas le "A" juste à côté de "NomDeVotreMob", il est important.)

    Maintenant que nous avons ajouté la méthode, celle ci nécessite un appel d'une méthode de la super classe (ou de la classe parente si vous préférez). Ajoutez cette ligne dans la méthode :

    super.doRenderLiving(entity, d, d1, d2, f, f1);
    

    PAS SI VITE ! Le tuto n'est pas terminé, il nous reste l'essentiel ainsi que l'appel de la méthode à ajouter ! 😉

    Nous allons mettre une condition qui vérifie si le String mobName de notre entity ne contient pas 0 caractère. Si mobName a + de 0 caractère, alors faire un render du nom affiché, sinon, ne rien afficher. Voici la condition :

    if(entity.mobName.length() > 0 && entity.mobName != "")
    {
    }
    

    Maintenant il faut exécuter ce qu'il y a dans la condition (donc compléter ce que la condition fait). Nous allons appeler une ligne qui se trouve dans la classe parente de notre Render !

    renderLivingLabel(entity, entity.mobName, d, d1, d2, 64);
    

    Décortiquons cette ligne ! :3
    renderLivingLabel = le nom de la méthode
    entity = l'entité porteuse du nom à afficher
    entity.mobName = le String mobName de notre entité
    d, d1, d2 = quelques paramètre concernant la position
    64 = Je ne sais pas ce que c'est, mais il me semble qu'il s'agirait de la taille du nom.

    Normalement, votre méthode devrait ressembler à ça :

    public void renderNomDeVotreMobA(EntityNomDeVotreMob entity, double d, double d1, double d2, float f, float f1)
    {
    super.doRenderLiving(entity, d, d1, d2, f, f1);
    
    if(entity.mobName.length() > 0 && entity.mobName != "")
    {
    renderLivingLabel(entity, entity.mobName, d, d1, d2, 64);
    }
    }
    

    Nous avons presque fini, il nous reste 2 méthode à ajouter :
    -une pour indiquer qu'on utilise un render custom (du moment qu'on ajoute un truc en + au render, ce dernier est considéré comme custom)
    -une qui va appeler notre méthode renderNomDeVotreMobA

    Allons-y pour la première :

    public void doRenderLiving(EntityLiving entityliving, double d, double d1, double d2, float f, float f1)
    {
    super.doRenderLiving((EntityNomDeVotreMob) entityliving, d, d1, d2, f, f1);
    }
    

    Encore une fois remplacez NomDeVotreMob par le nom de votre mob. ^^

    Maintenant nous allons appeler (enfin) notre méthode renderNomDeVotreMobA dans une AUTRE méthode :

    public void doRender(Entity entity, double d, double d1, double d2, float f, float f1)
    {
    renderNomDeVotreMob((EntityNomDeVotreMob)entity, d, d1, d2, f, f1);
    }
    

    Encore une fois remplacez NomDeVotreMob par le nom de votre mob.

    Et voilà, nous avons fini ! Je vous donne le résultat final de l'ensemble des méthodes UNIQUEMENT !

    L'entité :

    // à déclarer au dessus de votre constructeur
    public String mobName;
    // à initialiser DANS votre constructeur
    mobName = "Le nom du mob à afficher sur la tête de celui-ci";
    

    Le Render :

    public void renderNomDeVotreMobA(EntityNomDeVotreMob entity, double d, double d1, double d2, float f, float f1)
    {
    super.doRenderLiving(entity, d, d1, d2, f, f1);
    
    if(entity.mobName.length() > 0 && entity.mobName != "")
    {
    renderLivingLabel(entity, entity.mobName, d, d1, d2, 64);
    }
    }
    public void doRenderLiving(EntityLiving entityliving, double d, double d1, double d2, float f, float f1)
    {
    super.doRenderLiving((EntityNomDeVotreMob) entityliving, d, d1, d2, f, f1);
    }
    
    public void doRender(Entity entity, double d, double d1, double d2, float f, float f1)
    {
    renderNomDeVotreMobA((EntityNomDeVotreMob)entity, d, d1, d2, f, f1);
    }
    

    –---------------
    Voili voilou, j'espère que ce tutoriel vous aura plus. Je sais qu'il n'a pas été demandé, mais en tant qu'admin, je me dois de partager mon savoir. ^^ (cc Robin4002) 🆒



  • Héhé ! Bien sympa se petit tuto, merci :).



  • Tu pourais faire un Tuto stp pour expliqué comment ta fait pour mettre une épée a ton mob comme lokoise ?


  • Administrateurs

    C'est vraiment si difficile que ça ?


  • Administrateurs

    @Baba_76:Il te suffit de regarder le pigman pour ça.



  • en théorie :
    [code_java]
    /**

    • Sets the held item, or an armor slot. Slot 0 is held item. Slot 1-4 is armor. Params: Item, slot
      */
      public void setCurrentItemOrArmor(int par1, ItemStack par2ItemStack){
      this.equipment[par1] = par2ItemStack;
      }
      [/code_java]
      Personnellement chez moi cela ne fonctionne pas. J'ai pas encore vraiment cherché d'où cela venait (pas eu le temps :()

  • Administrateurs

    Il y a ce code-la mais aussi un autre code dans le rendu de l’entité.


  • Administrateurs

    Personnellement j'utilise ce code :

    
    public static final ItemStack heldItem = new ItemStack(Item.swordDiamond, 1);
    
    

    et tout en bas de la classe :

    
    public ItemStack getHeldItem()
    {
    return this.heldItem;
    }
    
    

    Ça fonctionne également avec des tableaux (pour éviter de faire 89654321 fois public static final …) :

    
    public static ItemStack equippedItems[];
    public static int currentItem;
    
    

    dans le constructeur :

    
    this.currentItem = rand.nextInt(equippedItems.length); //donc qui va prendre un item random dans l'array
    
    
    
    public ItemStack getHeldItem()
    {
    return this.equippedItems[currentItem];
    }
    
    

    et en dessous de cette méthode suffit de mettre un static nu :

    
    static {
    equippedItems = (new ItemStack[] {
    new ItemStack(Item.diamond, 1),
    new ItemStack (Item.emerald, 1),
    new ItemStack (Item.swordDiamond, 1)
    });
    }
    
    

    Rien de difficile ^^



  • Merci pour cet aide, et par hasard tu c'est pas comment faire pour que les mob nous tape avec des coup d'épée justement ? =D



  • 64 = Je ne sais pas ce que c'est, mais il me semble qu'il s'agirait de la taille du nom.

    C'est la distance d'affichage, plus elle est grand, plus tu verra le nom loin, plus elle est petite, tu la verra de moins loin 😉



  • qui peut me dire les modif a faire pour la 1.7 svp?



  • bha tu fait ce tuto et tu regarde les erreur



  • le "renderLivingLabel" est souligné en 1.7.10, ainsi que le "doRenderLiving" 😕 il me propose "doRender" mais toujours une erreur au ""renderLivingLabel"" ><


  • Administrateurs

    C'est un tuto 1.6.X. ^^ J'ai vérifié pour la 1.7, et c'est un tout autre système (que j'ai du mal à capter d'ailleurs…). Donc désolé mais pour ce tuto 1.7 va falloir attendre un peu 😉 (d'autant plus que la 1.8 étant sorti qui n'arrange pas les choses ><)



  • Dac, merci. Je vais éviter de trop m'y attarder dessus et avancer alors ^^