Perte de durabilité des items de l'armure



  • Bonjour à tous ! Oui je sais je suis encore en 1.7.10. (je me suis mis à la 1.12.2 mais comme j'ai commencé un mod en 1.7 j'aimerai le finir). Bref j'ai un problème lié aux armures. J'ai déjà cherché à droite à gauche une solution mais rien. Enfaite je veux savoir comment régler la perte de la durabilité de chacun des item de l'armure. En clair si on me met un coup avec une épée, je veux que le casque perde "3" de durabilité, etc. J'ai regardé du côté de la classe ArmorMaterial ou de ISpecialArmor, mais je ne trouve pas.


  • Moddeurs confirmés Rédacteurs Administrateurs

    En fait ton problème n'est pas ici, c'est dans la fonction damageArmor que tu dois faire des dégâts à l'armure.

    Et je t'ai déjà dit ce qu'il faut utiliser :

    @robin4002 a dit dans Perte de durabilité des items de l'armure :

    Dans damageArmor il faut effectuer l'action de dégât sur l'armure, donc par exemple appeler stack.damageItem(damage);



  • verif la resistance de l'armure et change la selon l'épee adapté
    (ex si mon épee(qui se nomme BlueSword(ce n'est pas du spoil pour mon mod tout le monde le sait)ban fait du 1000 pour qu'il bouffe 50%(mon casque)de degas il faut faire 1000/3 il faut aproximativemt 333 en resistance et tu complete avec jusqu'a 1000)



  • pas sûr d'avoir compris x) Mais en mettant ça, mon plastron perd plus de durabilité que mon casque lorsqu'il prend des dégâts d'epées. Sauf que si je réduis le chiffre "7" (qui est le plastron), il pendra effectivement moins de durabilité, mais protégera moins en terme de résistance. Ce que je veux c'est avoir une bonne résistance, mais une faible perte de durabilité. (là je perd 5 de dura à chaque coup sur le plastron, et j'aimerai que ça soit 3).

    	celestArmor = EnumHelper.addArmorMaterial("celest_armor", 100, new int[] { 4, 7, 6, 6 }, 35);

  • Moddeurs confirmés Rédacteurs Administrateurs

    Salut,
    Les quatre nombres décrivent comment les pièces de l'armure doit absorber les dégâts.
    Plus c'est élevé moins le joueur ne prend de dégât et plus l'armure en prend.
    Si tu veux augmenter la durabilité, c'est la première valeur qu'il faut augmenter.



  • Merci de ta réponse.
    En effet, c'est ce que j'avais compris. Mais n'y a t'il pas un moyen de faire baisser la durabilité que perd la piece de l'armure à chaque coup justement ? Tout en conservant une forte résistance ?


  • Moddeurs confirmés Rédacteurs Administrateurs

    Non pas avec le système de Minecraft.

    Il faut passer par ISpecialArmor pour avoir un controle plus fin.



  • J'ai déjà essayé de m'en servir mais ça me paraît compliqué comme fonctionnement. As-tu une idée de quoi mettre dans les fonctions dans mon actuel ?


  • Moddeurs confirmés Rédacteurs Administrateurs

    Dans les fonctions de ton actuel ???
    Je n'ai pas compris la question.

    Pour utiliser ISpecialArmor il faut implémenter l'interface dans la classe de ton armure. Après pour le reste de tête je ne serai pas te le dire.



  • Je parle des 3 fonctions qui sont rajoutées en implementant l'interface. Je sais pas trop comment elles fonctionnent pour que ça m'affiche les t-shirt d'armure et que je puisse gérer la résistance + la durabilité.

    @Override
    public ArmorProperties getProperties(EntityLivingBase player, ItemStack armor, DamageSource source, double damage, int slot) {
    	return null;
    }
    
    @Override
    public int getArmorDisplay(EntityPlayer player, ItemStack armor, int slot) {
    	return 0;
    }
    
    @Override
    public void damageArmor(EntityLivingBase entity, ItemStack stack, DamageSource source, int damage, int slot) {
    	
    }

  • Moddeurs confirmés Rédacteurs Administrateurs

    Dans getArmorDisplay il faut return le nombre de demi "t-shirt" comme tu l'appelles (moi j'appelle plutôt ça des points d'armures).

    Dans damageArmor il faut effectuer l'action de dégât sur l'armure, donc par exemple appeler stack.damageItem(damage);

    Et dans getProperties il faut return un nouveau ArmorProperties par contre je ne connais pas son constructeur, donc je ne sais pas du tout ce qu'il faut mettre dedans.



  • Merci, je regarderai ça. Je passerai en résoulut si ça le fait



  • J'ai réussis à régler dégâts qu'on prend et les "t-shirt" de l'armure. En revanche je sais pas comment retirer la durabilité pour chaque pièce de l'armure et qu'en plus la durabilité perdu soit differente en fonction de la source de dégât.

    @Override
    public ArmorProperties getProperties(EntityLivingBase player, ItemStack armor, DamageSource source, double damage,
    		int slot) {
    	return new ArmorProperties(0, ArmorMaterials.celestArmor.getDamageReductionAmount(slot) / 30.0D,
    			armor.getItem().getMaxDamage() + 1 - armor.getItemDamage());
    }
    
    @Override
    public int getArmorDisplay(EntityPlayer player, ItemStack armor, int slot) {
    	switch (slot) {
    	case 0:
    		return 4;
    	case 1:
    		return 7;
    	case 2:
    		return 5;
    	case 3:
    		return 4;
    	}
    	return slot;
    }
    
    @Override
    public void damageArmor(EntityLivingBase entity, ItemStack stack, DamageSource source, int damage, int slot) {
    }
    

    }


  • Moddeurs confirmés Rédacteurs Administrateurs

    Fais un switch sur slot dans la fonction getProperties. Slot va de 0 à 3 pour chaque pièce d'armure.



  • Je garde ce qu'il y a déjà dans la fonction ?
    Et seconde problème, quand je fais mon switch je peux pas return ça, pour faire les pertes du durabilités sur les pièces de l'armure.

    	switch (slot) {
    	case 0:
    		return armor.setItemDamage(armor.getItemDamage() + 1);
    	}

  • Moddeurs confirmés Rédacteurs Administrateurs

    Il faut mettre tout un return new ArmorProperties pour chaque pièce.



  • @Override
    public ArmorProperties getProperties(EntityLivingBase player, ItemStack armor, DamageSource source, double damage, int slot) {
    	switch (slot) {
    	case 0:
    		return new ArmorProperties(0, ArmorMaterials.celestArmor.getDamageReductionAmount(slot) / 28.0D,
    				armor.getItem().getMaxDamage() + 1);
    	case 1:
    		return new ArmorProperties(0, ArmorMaterials.celestArmor.getDamageReductionAmount(slot) / 28.0D,
    				armor.getItem().getMaxDamage() + 1);
    	case 2:
    		return new ArmorProperties(0, ArmorMaterials.celestArmor.getDamageReductionAmount(slot) / 28.0D,
    				armor.getItem().getMaxDamage() + 1);
    	case 3:
    		return new ArmorProperties(0, ArmorMaterials.celestArmor.getDamageReductionAmount(slot) / 28.0D,
    				armor.getItem().getMaxDamage() + 1);
    	}
    		
    	return null;
    }
    

    ça veut toujours pas, c'est certenement 'armor.getItem().getMaxDamage() + 1);' qui est mal fait


  • Moddeurs confirmés Rédacteurs Administrateurs

    Je ne connais pas le constructeur de ArmorProperties, donc je ne serai pas te dire.




  • Moddeurs confirmés Rédacteurs Administrateurs

    En fait ton problème n'est pas ici, c'est dans la fonction damageArmor que tu dois faire des dégâts à l'armure.

    Et je t'ai déjà dit ce qu'il faut utiliser :

    @robin4002 a dit dans Perte de durabilité des items de l'armure :

    Dans damageArmor il faut effectuer l'action de dégât sur l'armure, donc par exemple appeler stack.damageItem(damage);



  • C'est bon ça marche ! Merci à toi Robin
    Voici le code

    @Override
    public ArmorProperties getProperties(EntityLivingBase player, ItemStack armor, DamageSource source, double damage,
    		int slot) {
    	switch (slot) {
    	case 0:
    		return new ArmorProperties(0, ArmorMaterials.celestArmor.getDamageReductionAmount(slot) / 28.0D,
    				armor.getItem().getMaxDamage() + 1 - armor.getItemDamage());
    	case 1:
    		return new ArmorProperties(0, ArmorMaterials.celestArmor.getDamageReductionAmount(slot) / 28.0D,
    				armor.getItem().getMaxDamage() + 1 - armor.getItemDamage());
    	case 2:
    		return new ArmorProperties(0, ArmorMaterials.celestArmor.getDamageReductionAmount(slot) / 28.0D,
    				armor.getItem().getMaxDamage() + 1 - armor.getItemDamage());
    	case 3:
    		return new ArmorProperties(0, ArmorMaterials.celestArmor.getDamageReductionAmount(slot) / 28.0D,
    				armor.getItem().getMaxDamage() + 1 - armor.getItemDamage());
    	}
    
    	return null;
    }
    
    @Override
    public int getArmorDisplay(EntityPlayer player, ItemStack armor, int slot) {
    	switch (slot) {
    	case 0:
    		return 4;
    	case 1:
    		return 7;
    	case 2:
    		return 5;
    	case 3:
    		return 4;
    	}
    	return slot;
    }
    
    @Override
    public void damageArmor(EntityLivingBase entity, ItemStack stack, DamageSource source, int damage, int slot) {
    	stack.damageItem(damage * 3, entity);
    }}

Log in to reply