Ajouter des effet "cumulatif" sur un set d'armure



  • Slt voila avant de partir j’étais rester sur un problème, un effet cumulatif sur mes armure sur un set

    (je cherche l'effet absorption)

    exemple : quand je mets mon casque j'ai 2 coeur d'abso, la tous va bien,
    si je rajoute par exemple le body qui lui rajoute 4 coeur donc au total j'ai "6 coeur d'abso" etc etc en rajoutant legs et feet, donc un effet qui s'ajoute et pas qui ce remplace,

    ce que j'ai obtenu comme résultat jusqua maintenant c'est
    soit la pièce d'armure avec l'abso la plus élever prend le pas,
    soit j'ai un nombre de cœur d'abso heu INFINI !! (un peu overcheat l'armure O.o)

    ce qui est intéressant c'est le regen des coeur d'abso qui lui ce cumul bien !!

    bref si vous avez une idée je veux bien car la je suis a cours …

    PS : AlphaSwittleTeam m'aide également sur la chose mais idem il semble avoir également qu'elle que difficulté

    bref voici mon code j’espère sa pourra aidez

    package fr.celestiafrance.c_drone.common;
    
    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.potion.Potion;
    import net.minecraft.potion.PotionEffect;
    import net.minecraft.util.MathHelper;
    import net.minecraft.world.World;
    
    public class ArmorMK1 extends ItemArmor {
        public static final float ABSORPTION_LIMIT = 40.0f;
        private ItemArmor.ArmorMaterial material;
        private Object event;
    
        public ArmorMK1(ItemArmor.ArmorMaterial material, int type) {
            super(material, 0, type);
            this.material = material;
        }
    
        public String getArmorTexture(ItemStack stack, Entity entity, int slot,
                String type) {
            if (slot == 2) {
                return c_drone.MODID + ":textures/models/armor/Mk1_layer_2.png";
            }
            else {
                return c_drone.MODID + ":textures/models/armor/Mk1_layer_1.png";
            }
        }
        @Override
        public void onArmorTick(World world, EntityPlayer player, ItemStack stack) {
            if (this.armorType == 2 && player.isSprinting() && player.onGround) {
                player.motionX *= 1.4F;
                player.motionZ *= 1.4F;
            }
    
            if (this.armorType == 0) {
                if ((player.ticksExisted % 80) == 0) {
                    float absorption = player.getAbsorptionAmount();
                    if (absorption < 4.5f) {
                        absorption += 0.5f;
                        player.setAbsorptionAmount(absorption);
                    }
                }
            }
            if (this.armorType == 1) {
                if ((player.ticksExisted % 80) == 0) {
                    float absorption = player.getAbsorptionAmount();
                    if (absorption < 8.5f) {
                        absorption += 0.5f;
                        player.setAbsorptionAmount(absorption);
                    }
                }
            }
            if (this.armorType == 2) {
                if ((player.ticksExisted % 80) == 0) {
                    float absorption = player.getAbsorptionAmount();
                    if (absorption < 2.5) {
                        absorption += 0.5f;
                        player.setAbsorptionAmount(absorption);
                    }
                }
            }
            if (this.armorType == 3) {
                if ((player.ticksExisted % 80) == 0) {
                    float absorption = player.getAbsorptionAmount();
                    if (absorption < 5.5f) {
                        absorption += 0.5f;
                        player.setAbsorptionAmount(absorption);
                    }
                }
            }
        }
    }
    
    


  • tu fait une condition qui check les pièces d'armure du joueur, si il a un casque ca ajoute a une variable +2, etc… et c'est cette variable que tu attribut a ton setAbsoption



  • Ah oui Isador, en effet c'est une bonne idée 😉



  • je sais j'ai toujours de bonne idée 😛



  • @Override
    public void onArmorTick(World world, EntityPlayer player, ItemStack itemStack) {
    float absorption = player.getAbsorptionAmount();
    float limit = 10.0f;
    if (this.armorType == 1) {
    if (absorption < limit) {
    if (player.ticksExisted % 80 == 0) {
    absorption += (limit - absorption);
    player.setAbsorptionAmount(absorption);
    }
    }
    }
    }
    


  • je revient vers vous cher amis MFF, voila avec alpha on c'est penchez sur la chose, on as creuser autant que possible mais la on bloque, pas moyen de mettre un effet qui ce cumul entre les pièces d'armure, serait t'il possible d'avoir l'aide de nos grand maitre java bien aimez ?^^



  • Oh tout puissant robin qui consulte ce poste, viens nous en aide 😛


  • Administrateurs

    Et si ne je ne sais pas ?
    En fait je ne vois pas l’intérêt de faire ce que vous êtes en train de faire, pour l’absorption il y a déjà l'EnumArmor, et si il ne suffit pas, on peut passer par l'interface ISpecialArmor, je ne vois pas l’intérêt de passer par la fonction de tick…



  • J'ai rien compris x) Tu peux nous mettre un exemple s'il te plait ?


  • Administrateurs



  • "dieux à parlez, tous simplement"

    et les fidèles s'incline humblement

    merci robin 😉