Un mob tenant un item dans sa main (Simple/Avancé)


  • Administrateurs

    Dans ce tutoriel nous allons apprendre à ajouter un item dans la main gauche de votre mob.
    Il y aura deux modes pour ce tutoriel : Simple | Avancé

    Pourquoi "Simple" et "Avancé" ?
    -Et bien "simple" signifie que nous allons ajouter SIMPLEMENT, UN SEUL ITEM dans la main de votre mob. Ensuite, pour le mode avancé, nous allons apprendre à faire en sorte que votre mob aie un item aléatoire dans sa main. ^^

    Simple

    Pour commencer, vous devez déclarer cette variable (je ne vais pas vous dire où :D) :

    private static final ItemStack defaultHeldItem;
    

    Maintenant, nous allons créer une fonction dans notre classe comme ceci :

    public ItemStack getHeldItem()
    {
        return defaultHeldItem;
    }
    

    Oui nous n'avons pas encore initialisé notre variable et nous l'appelons déjà dans la méthode…
    Et bien qu'attendons-nous ? C'est parti ! Où vous voulez, dans votre classe (de préférence en bas de classe), ajoutez ce code :

    static
    {
        defaultHeldItem = new ItemStack(Item.diamond, 1);
    }
    

    Et voilà. 😄

    *Qu...Quoi, c'est déjà fini ? *
    *-Concrètement, oui. Mais il s'agit du mode simple item (ou mode OneItem :D), maintenant nous allons nous attaquer au mode avancé ! 😛 *

    Avancé

    Pourquoi "Avancé" ?
    -Nous allons créer un tableau où le mob va utiliser un item aléatoire du tableau.

    Donc pour se faire, nous allons créer deux variables :

    public static ItemStack equippedItems[];
    public int currentItem;
    

    et dans le constructeur de votre mob, initialisez l'Integer :

    currentItem = rand.nextInt(equippedItems.length);
    

    Là, nous venons d'indiquer ce que doit faire le mob, c'est à dire : Prendre un item aléatoire dans le tableau, MAIS, NOUS DEVONS INITIALISER NOTRE TABLEAU !

    Pour se faire (ou ce faire, j'ai un trou :s), rien de plus simple, de la même manière que la méthode "Simple", créez un static dans votre classe comme ceci :

    static
    {
        equippedItems = (new ItemStack[]
        {
            new ItemStack(Block.torchWood, 1), new ItemStack(Item.pickaxeStone, 1), new ItemStack(Item.hoeDiamond, 1), new ItemStack(Item.axeIron, 1), new ItemStack(Item.swordIron, 1)
        });
    }
    

    Votre mob va donc maintenant prendre un item aléatoire à chaque spawn, dans ce tableau !
    Attendez ! Nous avons oublié quelque chose ! ^^
    Il ne faut pas oublier de dire à votre mob qu'il a un item à porter, eh oui ! Sinon, ça ne fonctionnera pas. xD

    public ItemStack getHeldItem()
    {
        return equippedItems[currentItem];
    }
    

    Et pour finir, la sauvegarde dans l'NBTTagCompound !

    public void writeEntityToNBT(NBTTagCompound nbttagcompound)
    {
        nbttagcompound.setInteger("equippedItem", currentItem);
        super.writeEntityToNBT(nbttagcompound);
    }
    
    public void readEntityFromNBT(NBTTagCompound nbttagcompound)
    {
        currentItem = nbttagcompound.getInteger("equippedItem");
        super.readEntityFromNBT(nbttagcompound);
    }
    

    Et voilà, nous en avons fini pour ce tutoriel ! 😄
    Je n'ai malheureusement pas de screens sous la main, mais autant voir votre PROPRE résultat ! 🙂
    Si vous avez des questions, n'hésitez pas ! ^^
    Bye ~



  • Moi sa ne marche pas 😕
    Le mob ne tient pas d'item mais il donne des coups circulaires maintenant …



  • nono1507 tu es en quelle version ? je peut t'aider



  • Merci je suis en 1.6.4



  • Ok alors… Passe moi la classe de l'entitée



  • Voila : http://pastebin.com/446ne3Lp
    Merci beaucoup pour ton aide 🙂



  • De rien 😉 Je m'y attelle de suite 🙂


    Tiens !
    http://pastebin.com/rv73qZxH



  • Excuse moi j'avais pas vu le petit "Tiens !" en dessous XD
    Merci mais eclipse me souligne "setCurrentItemOrAmor" maintenant 😕

    EDIT:
    C'est réparé : Tu avais oublié le R de "OrARomr" par contre mon mob spawn plus 😕



  • Pourquoi ? C'est quoi l'erreur ?



  • Il y en a aucune mais quand j'utilise l'oeuf , la console m'affiche ceci :

    http://pastebin.com/dsG0TqUa



  • On va faire ça autrement :
    http://pastebin.com/PGJYhiDw



  • Cette fois ci il spawn mais pas d'épéee XD



  • x) Sérieux ? Passe moi tes logs et la classe où est enregistré l'item stp 😛





  • J'ai trouvé ! Enfin 😛

    Tu déclare ton entité avant ton épée, ce qui fait bugger 😛



  • Non toujours pas 😕
    class principale apres le changement: http://pastebin.com/KmdqzELe



  • Je vois pas le problème, essaie de tout mettre dans le pré-init pour voir 😞


  • Moddeurs confirmés Modérateurs

    donne l'épée a ton mob ajoute System.out.println("test"); et regarde si sa te le marque



  • Meme quand je déplace tout dans le PreInit sa ne marche pas 😕



  • Et là y a Robin qui vient, qui nous trouve en train de nous enfoncer et il sort la solution en quelques secondes x)


Log in to reply