Problème de durabilité



  • Bonjour à tous,
    J'ai créer mon armure en 1.10 sauf que même quand je prend des dégâts la durabilité des pièces d'armure reste inchangée
    Voici ma classe armure

    package net.shadowfacts.tutorial.item;
    
    import net.minecraft.entity.EntityLivingBase;
    import net.minecraft.entity.player.EntityPlayer;
    import net.minecraft.inventory.EntityEquipmentSlot;
    import net.minecraft.item.Item;
    import net.minecraft.item.ItemStack;
    import net.minecraft.util.DamageSource;
    import net.minecraftforge.common.ISpecialArmor;
    import net.shadowfacts.tutorial.TutorialMod;
    
    public class ItemArmor extends net.minecraft.item.ItemArmor implements ItemModelProvider, ISpecialArmor{
    
    private String name;
    
    public ItemArmor(ArmorMaterial material, EntityEquipmentSlot slot, String name) {
    super(material, 0, slot);
    setRegistryName(name);
    setUnlocalizedName(name);
    this.name = name;
    material.customCraftingMaterial = ModItems.ingotCopper;//pour réparer l'item
    
    }
    
    @Override
    public void registerItemModel(Item item) {
    TutorialMod.proxy.registerItemRenderer(this, 0, name);
    }
    @Override
    public ArmorProperties getProperties(EntityLivingBase player, ItemStack armor, DamageSource source, double damage, int slot) {
    switch(slot) {
    case 3://Helmet
    return new ArmorProperties(0, 0.05, 10);
    case 2://Chesplate
    return new ArmorProperties(0, 0.2, 16);
    case 1://Leggings
    return new ArmorProperties(0, 0.3, 12);
    case 0://Boots
    return new ArmorProperties(0, 0.04, 6);
    default://Juste pour éclipse rien de particulier à faire ici
    return new ArmorProperties(0, 0, 0);
    }
    }
    
    @Override
    public int getArmorDisplay(EntityPlayer player, ItemStack armor, int slot) {
    switch(slot) {
    case 0:
    return 4; //Deux plastrons
    case 1:
    return 6; //Trois plastrons
    case 2:
    return 7; //Trois plastrons et demi
    case 3:
    return 3; //Un plastron et demi
    default:
    return 0;
    }
    }
    
    @Override
    public void damageArmor(EntityLivingBase entity, ItemStack stack, DamageSource source, int damage, int slot) {
    stack.damageItem(damage / 2, entity);
    if(stack.getItemDamage() >= stack.getMaxDamage()) {
    stack = null;
    }
    }
    }
    

    Merci d'avance pour voitr aide !



  • Bonjour aypristyle,

    Pourquoi est-ce que vous re-écrivez la méthode ItemArmor#damageArmor ?
    Celle-ci est déjà implémentée par la classe ItemArmor de Minecraft de base.
    De plus, utiliser le nom de classe ItemArmor risque de vous causer beaucoup de problèmes dans le futur, je vous conseille d'ajouter un tag en rapport avec votre mod, ou de préciser le nom de la classe (Ex: ItemArmorMOD ou ItemArmorObsidienne)

    Cordialement,
    Gugu



  • Bonjour,
    Merci pour ta réponse j'ai appliqué tes conseils mais mon problème ne sait toujours pas résolu aurait-tu d'autres conseils a me donner ?
    Aypristyle


  • Rédacteurs

    Gugu : c'est ISpecialArmor#damageArmor donc il est obligé de la ré-écrire en implémentant l'interface

    Aypristyle : essai

    
    @Override
    public void damageArmor(EntityLivingBase entity, ItemStack stack, DamageSource source, int damage, int slot) {
    stack.damageItem(damage, entity);
    if(stack.getItemDamage() >= stack.getMaxDamage()) {
    stack.stackSize -= 1;
    }
    }
    
    

    Ou un truc comme ça. En 1.11 la documentation est la suivante :

    
    /**
    * Applies damage to the ItemStack. The mod is responsible for reducing the
    * item durability and stack size. If the stack is depleted it will be cleaned
    * up automatically.
    *
    * @param entity The entity wearing the armor
    * @param stack The ItemStack of the armor item itself.
    * @param source The source of the damage, which can be used to alter armor
    * properties based on the type or source of damage.
    * @param damage The amount of damage being applied to the armor
    * @param slot The armor slot the item is in.
    */
    public abstract void damageArmor(EntityLivingBase entity, @Nonnull ItemStack stack, DamageSource source, int damage, int slot);