Mettre une durablliliter a un item



  • [font=Ubuntu, sans-serifBonjour,]
    [font=Ubuntu, sans-serifj'ai crée un item que quand le joueur fait clique droit sa lui donne un effet de potion mais je voudrais qu'il ne disparaisent pas et qu'il perdent de la dura ]
    [font=Ubuntu, sans-serifvoici mon code]

    public class StickSpeed extends Item
    {
    
       public StickSpeed(Item stickSpeed)
       {
               this.setMaxDamage(160);
       }
    
       public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player)
         {
          player.addPotionEffect(new PotionEffect(1, 100, 6));
              if (!player.capabilities.isCreativeMode)
              {
                  –stack.stackSize;
              }
      return stack;
      }
    }
    

  • Administrateurs

    Salut,
    Il faut utiliser les metadata.
    Je t'invites à regarder le code des outils.



  • comment sa les metadata et sa ce trouve ou les code des outils c'est ca non ? (15, new int[]{2, 6, 5, 2}, 9),

    et du coup mon code juste avant faut que je le change entierement ou pas ?



  • Dans ta methode "onRightClickItem" tu remplaces le tout par ça :

    
    if (stack == TaClassPrincipale.tonItemEnQuestion)
    {
         stack.damageItem(1, player);
    [size=small   player.addPotionEffect(new PotionEffect(1, 100, 6));]
    [size=small   if (!player.capabilities.isCreativeMode)]
    [size=small   {]
    [size=small      –stack.stackSize;]
    [font=Monaco, Consolas, Courier, monospace   }]
    }
    
    

    et comme ça quand tu feras un click droit cela va lui décrémenter de 1 sa durabilité quand tu fait click droit.
    Et puis aussi ajoute "@Override" juste au dessus de ta methode "onRightClickItem".



  • comme sa ?

    public class StickSpeed extends Item
    {
    
       public StickSpeed(Item stickSpeed)
       {
               this.setMaxDamage(16);
       }
    
       @Override
    
       public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player)
         {
          player.addPotionEffect(new PotionEffect(1, 4, 6));
          if (stack == ItemMod.StickSpeed)
          {
               stack.damageItem(1, player);
             player.addPotionEffect(new PotionEffect(1, 100, 6));
             if (!player.capabilities.isCreativeMode)
             {
                –stack.stackSize;
             }
          }
      return stack;
      }
    }
    

    sauf que sa me souligne stack == itemMod.stickspeed



  • if (stack.getItem() == ItemMod.StickSpeed)



  • package com.mod.olicraft.items;
    
    import com.mod.olicraft.init.ItemMod;
    
    import net.minecraft.entity.player.EntityPlayer;
    import net.minecraft.item.Item;
    import net.minecraft.item.ItemStack;
    import net.minecraft.potion.PotionEffect;
    import net.minecraft.world.World;
    
    public class StickSpeed extends Item
    {
    
       public StickSpeed(Item stickSpeed)
       {
               this.setMaxDamage(16);
       }
    
       @Override
    
       public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player)
         {
           if (stack.getItem() == ItemMod.StickSpeed)
           {
                stack.damageItem(1, player);
              player.addPotionEffect(new PotionEffect(1, 100, 6));
              if (!player.capabilities.isCreativeMode)
              {
                 –stack.stackSize;
              }
           }
           return stack;
          }
    }
    

    marche toujours pas sa consomme l'item



  • 
    if (!player.capabilities.isCreativeMode) // en gros tu check si le jouer est tout sauf en creative
    {
       –stack.stackSize // ici du decremente le stack ! c'est un peut normal que cela ne fonctionne pas --'
    }
    

    (Je pensais que tu en avait besoin donc je l'avais laisser dans le code)
    retire la condition et ça fonctionnera



  • merci 😄



  • y'aurais pas un moyen que sa ne puisent pas ce stacker et qu'il faut un temps genre 6 sec avant de reclicker ?


  • Administrateurs

    Dans le constructeur, en dessous de :
               this.setMaxDamage(16);
    Il faut ajouter :
    this.maxStackSize = 1;

    Pour le cooldown il y a déjà plusieurs demandes d'aides sur le forum où la solution a été donnée.



  • Apprends au passage à te servir des NBTTagCompound concernant un itemstack. C'est impératif si tu ne souhaites pas que chacun de tes différentes instances d'items sur ta maps, aient la même valeur du cooldown. Pour ceci, il y a également beaucoup de demandes sur le post., y compris une que j'avais posté il y a pas mal de temps…Tu la retrouveras en regardant mon profil, je pense 😃



  • plaigon je compend pas trop le //code je met mon code de mon item qui est dans la class de mon item ?

    public class ItemTestCoolDown extends Item
    
    {
    protected int cooldown = 0;
    protected int twentyMin = 24000; //20 minutes d'attente avant chaques utilisations 24000 = ticks minecraft
    
    public ItemTestCoolDown()
    {
    super();
    this.setCreativeTab(BOTICore.blocks);
    }
    
    @Override
    public void onUpdate(ItemStack stack, World world, Entity entity, int par4, boolean par5)
    {
    cooldown = cooldown + 1;
    if(cooldown == twentyMin)
    {
    ((EntityPlayer) entity).addChatMessage((new ChatComponentText(EnumChatFormatting.GREEN + "You can use it now !")));
    }
    
    }
    
    @Override
    public ItemStack onItemRightClick(ItemStack par1ItemStack, World par2World, EntityPlayer par3EntityPlayer) {
    
    if(!par2World.isRemote)
    {
    //CODE ICI
    cooldown = 0;
    }
    return par1ItemStack;
    }
    




  • pas trop en faite je sait pas de quoi maider avec 😕



  • Dans ce cas regarde les autres items vanilla qui se servent des tags, j'sais pas ….C'est pas compliqué, surtout que t'as aussi celui là en + (https://www.minecraftforgefrance.fr/showthread.php?tid=1782) et que je te parle même pas de TOUTES LES DIZAINES d'autres déjà présents et accessibles en 1 seule recherche --' Sa te permettraitde trouver réponse à toutes tes questions ...
    Fais un peu un effort, on sera pas toujours là pour te donner du code tout bien fait et tout bien expliqué, hein !



  • ses bon pour le timer, 
    j'ai crée un item qui regen (4 coeur) quand on clique mais je voudrais que par exemple si j'ai 9 coeur  sa me mettent les coeur en + en absorption qui ne disparaisent que si je perd de la vie voici mon code

    package com.mod.olicraft.items;
    
    import com.mod.olicraft.init.ItemMod;
    import net.minecraft.entity.player.EntityPlayer;
    import net.minecraft.item.Item;
    import net.minecraft.item.ItemStack;
    import net.minecraft.potion.PotionEffect;
    import net.minecraft.world.World;
    
    public class HealStick extends Item
    {
    
       public HealStick(Item stickSpeed)
       {
               this.setMaxDamage(32);
               this.maxStackSize = 1;
       }
    
       @Override
    
       public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player)
         {
           if (stack.getItem() == ItemMod.HealStick)
           {
                stack.damageItem(1, player);
               player.heal(8);
              if (!player.capabilities.isCreativeMode)
              {
    
              }
           }
           return stack;
          }
    
    }
    

  • Administrateurs

    public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player)
    {
    if(stack.getItem() == ItemMod.HealStick)
    {
    stack.damageItem(1, player);
    float absorbtion = player.getHealth() + 8.0F - 20.0F;
    player.heal(8.0F);
    if(absorbtion > 0.0F)
    {
    player.setAbsorptionAmount(absorbtion);
    }
    }
    return stack;
    }
    


  • merci 😄 comment on fait pour mettre le sujet en résolu ?



  • Tu vas sur ton premier post, tu fais Editer et ensuite tu peux changer les balises.