Item qui rend de la durabilité



  • Bonjours j'aurais une question il y aurait moyen de faire qu'un item rende de la durabilité aux pièce d'armure équiper, si oui comment.
    J'ai fais quelques recherche sur les sources de botania qui lui me donne :

    
    public boolean getIsRepairable(ItemStack par1ItemStack, ItemStack par2ItemStack) {
    return par2ItemStack.getItem() == Mods.Paladium && par2ItemStack.getItemDamage() == 4 ? true : super.getIsRepairable(par1ItemStack, par2ItemStack);
    }
    
    

    (j'ai viré la réparation a l'enclume le temps de test)
    Si quelqu'un a une idée 😃


  • Administrateurs

    Salut,
    getIsRepairable c'est pour la réparation via enclume.
    Ce que tu souhaites c'est que lorsque l'item est porté dans l'inventaire l'armure se restaure. Mais comment ? D'un coup ? Progressivement ? L'item doit-il s'user en même temps ?



  • Elle se restaure petit a petit en enlevant de la durabilité sur l'item une fois que l'item est a 0 il ne casse pas mais ne regen plus


  • Rédacteurs

    Un truc comme ça ?

    
    @Override
    public void onUpdate(ItemStack stack, World world, Entity entity, int slot, boolean selected)
    {
    if(entity instanceof EntityPlayer) //Si c'est un joueur
    {
    EntityPlayer player = (EntityPlayer) entity; //On cast
    for(int i = 0; i < 4; i++) //Il y a 4 pièces d'armure
    {
    ItemStack armor = player.getCurrentArmor(i); //On récupère la pièce
    if(armor != null) //Cas où le slot est vide on ne rentre pas
    {
    //Vérifie qu'on répare pas un item entièrement réparé et qu'il reste de la durabilité à l'item qui répare
    if(armor.getItemDamage() > 0 && stack.getItemDamage() < stack.getMaxDamage())
    {
    stack.setItemDamage(stack.getItemDamage() + 1); //On enlève de la durabilité à l'item qui répare
    armor.setItemDamage(armor.getItemDamage() - 1); //On rajoute de la durabilité à la pièce d'armure
    }
    }
    }
    }
    }
    
    

    Et pense à mettre :

    
    this.setMaxDamage(le nombre que tu veux);
    
    

    Dans le constructeur



  • Lis bien ton code bodri, quand tu dis que tu enlèves de la durabilité tu mets +1 et vice-versa. De plus dans ta condition, tu as inversé le nom des variables, elle devrait plutôt être comme ça :

    
    //Vérifie qu'on répare pas un item entièrement réparé et qu'il reste de la durabilité à l'item qui répare
    if(stack.getItemDamage() > 0 && armor.getItemDamage() < armor.getMaxDamage())
    {
    stack.setItemDamage(stack.getItemDamage() - 1); //On enlève de la durabilité à l'item qui répare
    armor.setItemDamage(armor.getItemDamage() +1); //On rajoute de la durabilité à la pièce d'armure
    }
    
    


  • Et il y moyen de faire que je puisse réparer avec un item lui rendre 50 dura par item



  • Tu veux dire rendre instantanément après clic droit, 50 de dura à l'armure ?
    Si oui, tout se passe dans la méthode onItemRightClick et c'est quasiment le même code qu'on t'a donné 😃



  • Non je veux dire que mettre un ingot plus l'anneau dans la table de craft = donné 50 dura a l'anneau en plus



  • Regarde les crafts de minecraft avec l'armure et les outils


  • Rédacteurs

    @'Julot10085':

    Lis bien ton code bodri, quand tu dis que tu enlèves de la durabilité tu mets +1 et vice-versa. De plus dans ta condition, tu as inversé le nom des variables, elle devrait plutôt être comme ça :

    
    //Vérifie qu'on répare pas un item entièrement réparé et qu'il reste de la durabilité à l'item qui répare
    if(stack.getItemDamage() > 0 && armor.getItemDamage() < armor.getMaxDamage())
    {
    stack.setItemDamage(stack.getItemDamage() - 1); //On enlève de la durabilité à l'item qui répare
    armor.setItemDamage(armor.getItemDamage() +1); //On rajoute de la durabilité à la pièce d'armure
    }
    
    

    Tu t'es embrouillé, mon code était bon (je l'avais testé), quand on fait ```java
    stack.setItemDamage(stack.getItemDamage() + 1);

    Effectivement on exprime la durabilité de cette façon :
    ```java
    int durability = stack.getMaxDamage() - stack.getItemDamage();
    

    Ainsi en ajout 1 à itemDamage on enlève 1 à la durabilité.
    J'espère que tu as compris.

    Même raisonnement pour la condition, imagine l'item qui répare a pour itemDamageMax 100 et pour itemDamage 100 aussi, alors sa durabilité sera égale à 100 - 100 = 0 (0 de durabilité on ne devrait pas pouvoir réparer), cependant 100 > 0 donc ton code dirait que l'on peut réparer.

    Tout ça pour dire qu'il ne faut confondre durabilité et damageValue.

    –-----------------------------------------------------------------------------------------

    Quand à l'histoire de rajouter de la durabilité on craftant il faut que tu passe par une implémentation de IRecipe, regard dans la classe se trouvant dans net.minecraft.item.crafting.RecipeRepairItem et il y a un tuto sur MFF qui explique comment créer un implémentation de IRecipe



  • A ok autant pour moi, tu m'apprends quelque chose 😃



  • Alors j'ai chercher un peu mais je ne trouve pas comment réparer mon item dans l'inventaire grâce a un lingot donc si jamais quelqu'un connais la classe de minecraft qui gère ça je prendrais bien
    Merci !



  • Si c'est en craft :
    @'SCAREX':

    Regarde les crafts de minecraft avec l'armure et les outils



  • Si c'est en craft :

    Je me doute mais où qu'on le trouve car je me balade dans net.minecraft.item.crafting mais je ne vois pas où



  • Effectivement minecraft fait ces crafts directement dans le CraftingManager, mais tu peux utiliser le tutoriel sur le forum pour faire un IRecipe custom



  • Voila Voila J'ai le Irecipe ça marche Merci =p



  • tu peux me donner le code en entier avec la durabilité a definir stp



  • Évite de remonter des si anciens sujets 😉



  • Et toi évite quand tu ajoutes un message de citer 3 ou 4 autres messages aussi longs que ça 😉
    Et si tu as du mal avec un post aussi vieux (effectivement) @MLNGamer, recrée un nouveau topic à la place de déterrer 😃