Résolu 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 armurepackage 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 -
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);