Recherche d'une "function"



  • voila je me suis créez un item "bouclier d’énergie"

    en gros j'ai attribué l'enchant absorb à l'item et tant que on as le dis "item" dans l'inventaire on gagne jusqu’à 20 cœur de "bouclier"

    mon problème

    • quand on jette l'item, je voudrais que cette barre de "bouclier" disparaisse, car actuellement même si je jette l'item
      l'effet reste indéfiniment (bien sur si on ce prend une tarte ça ne ce régénère pas)

    mais tant que l'on subit pas de dégât, on peut gardez la chose des heures entière …

    en gros je voudrais savoir si il existe une fonction qui check si un certain item sont dans l'inventaire,

    merci d'avance 🙂



  • Je crois qu'une fonction s'appelle "worldRemote" ou un truc comme ça, essaye



  • world.remote permet de savoir si c'est coté serveur ou coté client, rien a voir avec un item



  • @'isador34':

    world.remote permet de savoir si c'est coté serveur ou coté client, rien a voir avec un item

    Ah ok merci de ta précision ^^



  • Alors, dans un tick handler, tu peux check si le joueur a l'item en main.

    Si il l'a -> Une boolean qui gère l'effet passe en true
    Dans le cas contraire, false

    Normalement, ça devrais marcher

    Si tu peux donner le code ça aiderais



  • voila le code en question

    package fr.celestiafrance.c_drone.common;
    
    import java.util.List;
    
    import cpw.mods.fml.client.FMLClientHandler;
    import net.minecraft.entity.Entity;
    import net.minecraft.entity.EntityLivingBase;
    import net.minecraft.entity.player.EntityPlayer;
    import net.minecraft.item.Item;
    import net.minecraft.item.ItemStack;
    import net.minecraft.util.StatCollector;
    import net.minecraft.world.World;
    
    public class ItemShield extends Item {
    
    protected ItemShield()
    {
    }
    
    public void onUpdate(ItemStack par1ItemStack, World par2World, Entity par3Entity, int par4, boolean par5)
    {
    EntityPlayer player = FMLClientHandler.instance().getClient().thePlayer;
    int noAbs = 20;
    if ((par4 < 1000) && (par3Entity.ticksExisted % 80 == 0) && ((par3Entity instanceof EntityLivingBase)))
    {
    float abs = ((EntityLivingBase)par3Entity).getAbsorptionAmount();
    if (abs < 19.0F)
    {
    abs += 1.0F;
    ((EntityLivingBase)par3Entity).setAbsorptionAmount(abs);
    }
    }
    else if (par4 > 1000){
    ((EntityLivingBase)par3Entity).setAbsorptionAmount(noAbs);
    }
    }
    
    public void addInformation(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, List par3List, boolean par4)
    {
    par3List.add(StatCollector.translateToLocal("item_Shield"));
    par3List.add(StatCollector.translateToLocal("item_Shield"));
    super.addInformation(par1ItemStack, par2EntityPlayer, par3List, par4);
    }
    
    }
    


  • en faait on veux check si le joueur l'a sur lui, pas forcement équipé



  • Le soucis est que quand tu jette l'item, tu ne retire pas l'effet.

    Essaie de voir si y'a un event pour quand le player droppe un item, et si l'item est le tien, tu retire les modifications



  • ok merci je regarde ca



  • Plus simple, tu regardes si l'item n'est plus dans ton inventaire lorsque tu le droppes puis tu enlèves la barre.



  • Bah justement je cherche cette fonction



  • Tien voila se que tu recherche 😛

    
    player.inventory.hasItemStack()
    
    

    Tu fais un truc genre :

    
    if(player.inventory.hasItemStack(new ItemStack(tonMod.tonItem)))
    {
    
    player.addPotionEffect((new PotionEffect(Potion.nightVision.id, 100, 0)));
    
    System.out.println("Lol");
    
    }
    else
    {
    
    player.addPotionEffect((new PotionEffect(Potion.nightVision.id, 0, 0)));
    
    System.out.println("Lol2");
    }
    
    

    Enjoy 😉



  • Oui mais avant faut checker si il a droppé le bon item, sinon ça exécute la condition à chaque item droppé, ce qui n'est pas très optimisé… 😕



  • Bah un else if == null tout simplement, je teste dans l'après le code



  • Oui mais il y a pas 40 solution car comment tu fais si le gars met sont truc dans un coffre ?

    Au faite Zak le code que j ai mit plus haut ne check absolument pas les item dropé il check si le gars a l'item dans l'inventaire

    Mais bon si tu veut tjr check si il a drop le bon item alors fais sa :

    
    private void onPlayerTick(EntityPlayer player)
    {
    
    if(player.getCurrentEquippedItem() != null)
    {
    
    ItemStack hand = player.getCurrentEquippedItem();
    
    if(hand == new ItemStack(tonMod.tonItem))
    {
    
    player.addPotionEffect((new PotionEffect(Potion.nightVision.id, 0, 0)));
    
    System.out.println("Lol");
    
    }
    
    }
    
    }
    


  • 
    if ((player.inventory.hasItemStack(new ItemStack(c_drone.itemShield)) && (par3Entity.ticksExisted % 0.5 == 0) && ((par3Entity instanceof EntityLivingBase))))
    {
    float abs = ((EntityLivingBase)par3Entity).getAbsorptionAmount();
    if (abs < 2000.0F)
    {
    abs += 1.0F;
    ((EntityLivingBase)par3Entity).setAbsorptionAmount(abs);
    }
    }
    else{
    System.out.println("plus item");
    ((EntityLivingBase)par3Entity).setAbsorptionAmount(noAbs);
    }
    
    

    le problème c'est que le else ne marche pas… La condition quand a elle est bien remplie



  • Tu la mit ou ?
    Car il faut que tu face un tick handler



  • Nan faut juste le mettre dans l'event qui gère le drop



  • je l'avais mis dans un onUpdate