Résolu Minecraft 1.7.10: Armures
-
Re-bonjour à tous, j’ai maintenant un nouveau problème qui vient a moi: lorsque que je suis sur mon serveur et quand un autre joueur me tape avec une de mes armures moddés, je ne prend aucun dégât jusqu’à la moitier de la dura de l’armure ou je me fait quasiment one-shot.
Après de nombreuses recherches je suis parvenu a implementer dans la classe de mon armure ISpecialArmor
Maintenant c’est étrange, tout fonctionne mais quand un zombie me frappe par exemple je prend 1 coeur alors que cette armure reste puissante…
Voici ma classe de l’armure:
package com.mod.aktezia.items; import com.mod.aktezia.Reference; import com.mod.aktezia.init.ItemMod; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemArmor; import net.minecraft.item.ItemStack; import net.minecraft.util.DamageSource; import net.minecraft.util.MathHelper; import net.minecraftforge.common.ISpecialArmor; import net.minecraftforge.common.ISpecialArmor.ArmorProperties; import net.minecraft.item.ItemArmor.ArmorMaterial; public class ItemArmorLinxium extends ItemArmor implements ISpecialArmor { public ItemArmorLinxium(ArmorMaterial material, int armorType, String name){ super(material, 0, armorType); } public String getArmorTexture(ItemStack stack, Entity entity, int slot, String type) { if(stack.getItem() == ItemMod.linxium_legs) { return Reference.MOD_ID + ":textures/models/armor/linxium_layer_2.png"; } else if(stack.getItem() == ItemMod.linxium_boots || stack.getItem() == ItemMod.linxium_chestplate || stack.getItem() == ItemMod.linxium_helmet); { return Reference.MOD_ID + ":textures/models/armor/linxium_layer_1.png"; } } public ArmorProperties getProperties(EntityLivingBase player, ItemStack stack, DamageSource source, double damage, int slot){ if(source.isProjectile() == true) { return new ArmorProperties(1, 1, MathHelper.floor_double(damage * 3D)); } //problems with this - want to decrease damage done to player if zombie else if(source == DamageSource.generic) { return new ArmorProperties(1, 1, MathHelper.floor_double(damage * 20D)); } return new ArmorProperties(1, 1, 1); } public int getArmorDisplay(EntityPlayer player, ItemStack armor, int slot) { if(slot == 0){ //boots return 10; } else if(slot == 1){ //leggings return 13; } else if(slot == 2){ //Chestplate return 15; } else{ //helmet return 15; } } public void damageArmor(EntityLivingBase entity, ItemStack stack, DamageSource source, int damage, int slot) { if(source.isProjectile() == true){ stack.damageItem(damage * 3, entity); //Allows you to control the amount of damage done to each piece of armor, useful for nerfing some suits of armor. } else if(source == DamageSource.generic){ stack.damageItem(damage * 3, entity); //Allows you to control the amount of damage done to each piece of armor, useful for nerfing some suits of armor. } else if(source == DamageSource.fall){ stack.damageItem(damage * 0, entity); } else{ stack.damageItem(damage / 3, entity); } } }
Ainsi que ma classe ou j’enregistre mes Items
public static ArmorMaterial Linxiumarmor = EnumHelper.addArmorMaterial("Linxiumarmor", 80, new int[] {6, 11, 9, 6}, 20);
linxium_helmet = new ItemArmorLinxium(Linxiumarmor, 0, null).setCreativeTab(AkteziaMod.Aktezia).setTextureName(Reference.MOD_ID + ":linxium_helmet").setUnlocalizedName("linxium_helmet"); linxium_chestplate = new ItemArmorLinxium(Linxiumarmor, 1, null).setCreativeTab(AkteziaMod.Aktezia).setTextureName(Reference.MOD_ID + ":linxium_chestplate").setUnlocalizedName("linxium_chestplate"); linxium_legs = new ItemArmorLinxium(Linxiumarmor, 2, null).setCreativeTab(AkteziaMod.Aktezia).setTextureName(Reference.MOD_ID + ":linxium_legs").setUnlocalizedName("linxium_legs"); linxium_boots = new ItemArmorLinxium(Linxiumarmor, 3, null).setCreativeTab(AkteziaMod.Aktezia).setTextureName(Reference.MOD_ID + ":linxium_boots").setUnlocalizedName("linxium_boots");
Ne vous inquiétez pas, j’ai bien enregistrer mon armure, etc…
Merci fort bien pour ceux qui m’aiderons !
-
yop, int[] {6, 11, 9, 6} la somme de ces valeurs doit faire 20 or les tiennent font 32, ensuite dans l’init de tes items armor new ItemArmorLinxium(Linxiumarmor, 3, null) le deuxieme arguments corespond a l’armorType et non au renderIndex ?
-
yop,
je viens de changer mes int:
public static ArmorMaterial Linxiumarmor = EnumHelper.addArmorMaterial("Linxiumarmor", 80, new int[] {3, 8, 6, 3}, 20);
Mais maintenant, effectivement mon deuxième argument est l’armorType, et quand je passe ma souris dessus, c’est effectivement ce qu’il faut “metre”
Maintenant que mes sommes font 20 comment augmenter l’absorption au dégât de mon armure ?
-
envoi ta class<extends ItemArmor>
-
La class ItemArmor c’est celle de minecraft
-
envoi celle ci => ItemArmorLinxium
-
Elle est dans le premier message normalement ainsi que ma class principale
-
Peux-tu accepter ma demande d’amis sur discord pseudo ( GodMan_ ) ?
Merci d’avance et toujours en attente de réponse… -
Bonjour à tous !
SpyMan ayant réglé mon problème, je vais expliquer pour ceux qui auront le même problème que moi:
public ArmorProperties getProperties(EntityLivingBase player, ItemStack stack, DamageSource source, double damage, int slot){ if(source.isProjectile() == true) { return new ArmorProperties(1, 1, MathHelper.floor_double(damage * 3D)); } //problems with this - want to decrease damage done to player if zombie else if(source == DamageSource.generic) { return new ArmorProperties(1, 1, MathHelper.floor_double(damage * 20D)); } return new ArmorProperties(1, 1, 1); }
Pour augmenter l’absorption des armures, remplacez les “1” par des valeurs supérieurs !
Sujet résolu