Modifier un item après sa création



  • Bonsoir, j'aurais une petite question à laquelle je n'ai pas trouvé de réponse. Je suis en train de faire un mod dans lequel j'ajoute notamment des fours et des forges. Dans le four, je souhaiterais ajouter un slot dans lequel on pourrait mettre du sel qui nous permettrait d'augmenter la nourriture que donnes les ingrédients qu'on fait cuire.
    Pour la forge, j'aimerais que les dégats que dont les épées qu'on forge soit variables.

    Mon problème étant que je ne souhaite pas créer une épée par dégat (une épée de 1 dégat, une de deux, trois, etc.), mais j'aimerais pouvoir faire qqch comme

    onCraft(ItemStack stack){
         stack.setFood(5.0f);
    }
    

    Je sais pas si c'était clair mais en gros j'aimerais modifier l'item après l'avoir créé et enregistré (register), comme il y a des runes dans certains mods, etc.

    Je vous remercie d'avance de prendre la peine de lire mon message et d'y réfléchir.
    Cordialement,


  • Moddeurs confirmés Rédacteurs Administrateurs

    Salut,
    Il faudrait mettre tes propriétés dans le tag NBT de l'item et dans la classe de l'item faire en sorte que les dégâts infligés soit en fonction de la valeur du nbt (il faudra pour ça override la fonction public boolean hitEntity(ItemStack stack, EntityLivingBase attackedLiving, EntityLivingBase attackerLiving) dans le cas de l'épée et pour augmenter la nourriture il faut override la fonction onItemEat (ou quelque chose qui y ressemble, je n'ai plus le nom de la fonction exacte).



  • Pour l'item c'est onFoodEaten 😉
    Justement, pour stocker des données avec les NBT, je dois utilises les fonctions writeToNBT et readFromNBT ? Elles n'existent pas dans la classe item, donc je ne sais pas comment faire.
    Merci sincèrement de ta réponse si rapide est efficace, c'est la troisième fois que je poste quelque chose et vous mettez toujours moins de 24h à mon répondre (moins d'une heure là) et on voit que vous travaillez bien !


  • Moddeurs confirmés Rédacteurs Administrateurs

    Il faut ajouter les valeurs au tag nbt de l'itemstack.
    Donc déjà il te faudra forcement une fonction avec l'itemstack en argument pour manipuler ça.

    Le code que tu dois faire ressemblera à ça :

    if(!stack.hasTagCompound())
    {
        stack.setTagCompound(new NBTTagCompound);
    }
    stack.getTagCompound().setInteger("salt", 5); // par exemple pour mettre le sel à 5
    

    Et pour récupérer la valeur :

    int salt = 0;
    if(stack.hasTagCompound())
    {
        salt = stack.getTagCompound()getInteger("salt"); // renvoie 0 si le tag n'existe pas
    }
    // reste de la logique
    


  • Merci, c'est tout bon maintenant.


Log in to reply