KnockBackResistance sur une armure


  • Correcteurs

    Bien le bonjour,

    Je me suis baladé sur le code source de flan's mod afin de trouver comment il mettait le knockBackResistance sur certaines pièces d'armures, cela dit comme je suis un novice de stade 0 élevé au grade de "boulet qui n'a pas eu le temps de comprendre vraiment les bases du langage java", eh bien je n'ai pas réussis à l'adapter à mon projet.

    Voilà le lieu du GitHub quand je cherche "knockBackResistance " https://github.com/FlansMods/FlansMod/search?utf8=✓&q=knockbackResistance

    Si quelqu'un pouvait m'expliquer (en un dialecte pas trop spécifique même si il faut ce qu'il faut) si ce qu'il y a à mettre dans ma classe ItemArmor, si y'a un truc dans le ClientProxy ou ce genre d'infos qui ne paraitront évident qu'aux initiés, je vous en serais grandement reconnaissant. 😃

    Toutoune1008,
    Novice de stade 0


  • Administrateurs


  • Correcteurs

    @'robin4002':

    https://github.com/FlansMods/FlansMod/blob/03ce92f1ab2cf12850e9b8f47816a426d6dcb3eb/src/main/java/com/flansmod/common/teams/ItemTeamArmour.java#L96-L103
    C'est juste une petite fonction dans la classe de l'armure.

    Oui, seulement le "map" s'affiche jaune et je ne sais pas comment régler ça.



  • Ce n'est pas une erreur, c'est un warning.

    N'y fais pas attention, ça ne provoquera aucun crash en jeu 😃


  • Correcteurs

    @'Julot10085':

    Ce n'est pas une erreur, c'est un warning.

    N'y fais pas attention, ça ne provoquera aucun crash en jeu 😃

    D'acc alors mon code ressemble à ça

    package fr.heroesconflict.modhc.common;
    
    import net.minecraft.entity.Entity;
    import net.minecraft.entity.SharedMonsterAttributes;
    import net.minecraft.entity.ai.attributes.AttributeModifier;
    import net.minecraft.item.ItemArmor;
    import net.minecraft.item.ItemStack;
    
    import com.google.common.collect.Multimap;
    
    public class ItemAllArmor extends ItemArmor
    {
    public ItemAllArmor(ArmorMaterial material, int type)
    {
    super(material, 0, type);
    }
    
    @Override
        public Multimap getAttributeModifiers(ItemStack stack)
        {
            Multimap map = super.getAttributeModifiers(stack);
            map.put(SharedMonsterAttributes.knockbackResistance.getAttributeUnlocalizedName(), new AttributeModifier(uuid[type.type], "KnockbackResist", type.knockbackModifier, 0));
            return map;
        }
    
    public String getArmorTexture(ItemStack stack, Entity entity, int slot, String type)
    {
    if(stack.getItem() == Modhc.bodyShock  || stack.getItem() == Modhc.headShock || stack.getItem() == Modhc.bootsShock || stack.getItem() == Modhc.legsShock)
    {
    return Modhc.MODID + ":textures/models/armors/bio_shock_layer_1.png";
    }
    […]
    else if(stack.getItem() == Modhc.bodyGreyR3 || stack.getItem() == Modhc.headGreyR3 || stack.getItem() == Modhc.bootsGreyR3 || stack.getItem() == Modhc.legsGreyR3)
    {
    return Modhc.MODID + ":textures/models/armors/soldat_grey_r3_layer_1.png";
    }
    return null;
    }
    }
    
    

    Dans le jeu, je n'ai pas du tout l'impression d'avoir la resistance aux KnockBack à 1 (maximum logiquement). 
    Est ce que je dois changer le 0 par un 1 dans la fonction qu'on me dit de rajouter?

    De plus il doit y avoir un "public…" à ajouter quelques part car "type." apparait en rouge, pareil pour les uui



  • type est une variable rajoutée au constructeur de la classe
    Crées-toi le même constructeur ainsi que la même variable et tu ne devrais plus avoir ce problème

    
    public ArmourType type;
    public ItemTeamArmour(ArmourType t)
    {
    type = t;
    }
    
    

  • Correcteurs

    @'Julot10085':

    type est une variable rajoutée au constructeur de la classe
    Crées-toi le même constructeur ainsi que la même variable et tu ne devrais plus avoir ce problème

    
    public ArmourType type;
    public ItemTeamArmour(ArmourType t)
    {
                type = t;
            }
    
    

    Ouaip, alors après j'ai des probs de constructeurs, car j'ai suivi le tuto de Robin et ma classe principale contient ça pour mes armures:

    Du coup pour le constructeur et ce qu'il y a à mettre dedans me pose problème.


  • Administrateurs

    @Override
    public Multimap getAttributeModifiers(ItemStack stack)
    {
    Multimap map = super.getAttributeModifiers(stack);
    map.put(SharedMonsterAttributes.knockbackResistance.getAttributeUnlocalizedName(), new AttributeModifier(field_111210_e, "KnockbackResist", 2, 0));
    return map;
    }
    

    Faut tester avec d'autres valeurs, j'ai mit 2 comme ça.


  • Correcteurs

    Oh…

    Radicalement dans le mille.
    Ce "field_111210_e" me sauve pour ceux qui passeront par là.

    Un grand merci pour cette aide apportée en tout cas.


  • Administrateurs

    Minecraft utilise ce même field pour les AttributeModifiers de l'épée et des outils. C'est dans ces classes que je l'ai trouvé.