Rajouter des chiffres décimaux a une valeur d'armure ?



  • Bonjours/Bonsoirs
    Etant en création d'un mod avec une multitude d'armure je souhaite bien sur leur mettre a toute une protection différente. Ayant créer plusieurs armures au dessus du diamant (3) elles montent toute d'un peu plus la protection au dessus de celle du diamant, a tel point que mon armure en saphir (la dernière) est a peu près … invincible O_o
    Pourtant je n'ai rajouté que 3 boucliers a celle ci ...
    J'aimerais donc réduire encore ces valeurs en les divisant c'est a dire qu'au lieu d'avoir ça :

    public static ArmorMaterial ms = EnumHelper.addArmorMaterial("ms", 55, new int[] {4, 10, 8, 4}, 30);
    

    j'ai ça :

    public static ArmorMaterial ms = EnumHelper.addArmorMaterial("ms", 55, new int[] {3.5, 10, 8, 3.5}, 30);
    

    sauf que j'obtiens bien entendu une erreur 😕 et le fais de caster le nombre ne change en rien mon problème 😞
    Donc si vous avez un moyen d'ajouter des décimales sur ces valeurs je suis ouvert a toute proposition ^^
    encore merci de votre aide
    cordialement azatom



  • Là juste en pensant au à tes lignes on voit que ce n'est pas possible puisqu'un int est un nombre entier
    Après faut regarder si tu peux mettre autre chose qu'un int et si ce n'est pas le cas je crains que ce ne soit pas possible :s



  • et bien étant donné que c'est un tableau de int oui forcément tu ne pourras pas y mettre des décimaux et un cast transformer 3.5 en 3, donc ce n'est pas ce que tu veux ^^'
    je ne penses pas que ce soit possible ainsi, il doit cependant y avoir une solution alternative.



  • On pourrais mettre un tableau de double au lieu d'un tableau de int non ?



  • Non
    Il me semble que c'est impossible
    addArmorMaterial requière des int et pas des double


  • Administrateurs

    Salut,
    Non, impossible, il faudrait modifier les codes de minecraft. Mojang ont mit dans int dans l'ArmorMaterial, on y peut rien. Désolé.

    En revanche, tu peux toujours jouer avec l'interface net.minecraftforge.common.ISpecialArmor
    public class MonArmure extends ItemArmor implements ISpecialArmor

    Il faut ajouter ces trois méthodes :

    @Override
    public ArmorProperties getProperties(EntityLivingBase player, ItemStack armor, DamageSource source, double damage, int slot)
    {
    return new ArmorProperties(priorité, ratio, dégat max);
    }
    
    @Override
    public int getArmorDisplay(EntityPlayer player, ItemStack armor, int slot)
    {
    return nombre de barre d armure;
    }
    
    @Override
    public void damageArmor(EntityLivingBase entity, ItemStack stack, DamageSource source, int damage, int slot)
    {
    //code a éxécuter pour abimer l'armure
    // stack.damageItem(damage, entity); par exemple
    }
    


  • et c'est si toute l'armure est sur le joueur ?
    Car si il fait un mixte ?


  • Administrateurs

    C'est pour chaque pièce, c'est pour ça que tu as le paramètre slot. Tout s'additionne il me semble.



  • @'robin4002':

    C'est pour chaque pièce, c'est pour ça que tu as le paramètre slot. Tout s'additionne il me semble.

    Je confirme, les valeurs s'additionnent, celles que tu indiques ne seront jamais les valeurs totales de toute l'armure.
    Ce système permet d'ailleurs d'avoir différents types d'armure sur soit (plastron en diamant, pantalons en fer…)



  • Je vais essayer je vous tiens au courant 🙂
    Edit : je ne prend aucun dégât, je pense que ça viens de ratio et de priorité, je n'ai pas bien compris ce que je dois y mettre ?
    De plus j'ai mis 2 barre de boucliers et ça me le mes pour toute les pièces, il n'y aurait pas un moyen pour que je puisse mettre une valeur a chaque pièce d'armure ?
    De plus n°2 : C'est du int le nombre de barre de bouclier ^^ donc ça ne change rien …