1.7.2 Rendre un item invisible


  • Rédacteurs

    Bonjour,
    voila mon problème, j'aimerai rendre un de mes item invisible, je pourrais bien-sûr le faire directement via son icon lors de sa création, mais je souhaite qu'il ne soit invisible que lors d'un moment précis. Je veux que l'item soit invisible quand le joueur l'est aussi (invisible).

    Sauf que voila je ne trouve pas la méthode pour arriver à ce but. Pouvez vous m'aidez ?

    Code :

       private void tickServerPlayer(EntityPlayer player)
       {
           doEffectIteminIventory(player, ModItemsList.IngotsMod, 1, 50, 2, Potion.regeneration.id, 220, 1);
           doEffectIteminUse(player, ModItemsList.IngotsMod, 10, Potion.invisibility.id, 220, 1);
       }
    

    et

       private void doEffectIteminUse(EntityPlayer player, Item item, int damage, int id, int time, int amplifier)
       {
           for(int i = 0; i < player.inventory.getSizeInventory(); i++)
           {
               if(player.inventory.getStackInSlot(i) != null && !player.capabilities.isCreativeMode)
               {
                   if(player.inventory.getStackInSlot(i).getItem() == item && player.inventory.getStackInSlot(i).getItemDamage() == damage)
                   {
                       if(player.inventory.getCurrentItem() == player.inventory.getStackInSlot(i))
                       {
                           player.addPotionEffect(new PotionEffect(id, time, amplifier));
                           if(id == Potion.invisibility.id)
                           {
                               // rendre invisble l'item ici
                           }
                       }
                   }
               }
           }
       }
    

    Code complet :
    :::

    package fr.blaze_empire.phenix246.mod.core.common.core;
    
    import java.util.Random;
    
    import net.minecraft.entity.player.EntityPlayer;
    import net.minecraft.item.Item;
    import net.minecraft.item.ItemStack;
    import net.minecraft.potion.Potion;
    import net.minecraft.potion.PotionEffect;
    import cpw.mods.fml.common.eventhandler.SubscribeEvent;
    import cpw.mods.fml.common.gameevent.TickEvent.Phase;
    import cpw.mods.fml.common.gameevent.TickEvent.PlayerTickEvent;
    import cpw.mods.fml.relauncher.Side;
    import fr.blaze_empire.phenix246.mod.core.common.items.ModItemsList;
    
    public class EventTick
    {
       @SubscribeEvent
       public void playerTick(PlayerTickEvent event)
       {
           if(event.phase == Phase.END)
           {
               if(event.side == Side.CLIENT)
               {
                   this.tickClientPlayer(event.player);
               }
               else
               {
                   this.tickServerPlayer(event.player);
               }
           }
       }
    
       private void tickClientPlayer(EntityPlayer player)
       {
    
       }
    
       private void tickServerPlayer(EntityPlayer player)
       {
           doEffectIteminIventory(player, ModItemsList.IngotsMod, 1, 50, 2, Potion.regeneration.id, 220, 1);
           doEffectIteminUse(player, ModItemsList.IngotsMod, 10, Potion.invisibility.id, 220, 1);
       }
    
       private void doEffectIteminIventory(EntityPlayer player, Item item, int damage, int random, int chance, int id, int time, int amplifier)
       {
           for(int i = 0; i < player.inventory.getSizeInventory(); i++)
           {
               if(player.inventory.getStackInSlot(i) != null && !player.capabilities.isCreativeMode)
               {
                   if(player.inventory.getStackInSlot(i).getItem() == item && player.inventory.getStackInSlot(i).getItemDamage() == damage)
                   {
                       Random rand = new Random();
                       if(rand.nextInt(random) < chance)
                           player.addPotionEffect(new PotionEffect(id, time, amplifier));;
                   }
               }
           }
       }
    
       private void doEffectIteminUse(EntityPlayer player, Item item, int damage, int id, int time, int amplifier)
       {
           for(int i = 0; i < player.inventory.getSizeInventory(); i++)
           {
               if(player.inventory.getStackInSlot(i) != null && !player.capabilities.isCreativeMode)
               {
                   if(player.inventory.getStackInSlot(i).getItem() == item && player.inventory.getStackInSlot(i).getItemDamage() == damage)
                   {
                       if(player.inventory.getCurrentItem() == player.inventory.getStackInSlot(i))
                       {
                           player.addPotionEffect(new PotionEffect(id, time, amplifier));
                           if(id == Potion.invisibility.id)
                           {
                               // rendre invisble l'item ici
                           }
                       }
                   }
               }
           }
       }
    }
    

    :::

    Mon but est bien-sûr actuellement de la faire pour l'instant avec un item de mon mod mais à terme de pourquoi pas le faire avec des item de mincraft vanilla d'où l'utilisation d'un event et l'obligation de faire tout avec celui-ci.

    [/java]


  • Moddeurs confirmés Rédacteurs Administrateurs

    Tag NBT.
    Et après pour adapter l'icon en fonction du tag, tu as ça :

    public IIcon getIconIndex(ItemStack stack)
    {
    if(!stack.hasTagCompound())
    {
    stack.setTagCompound(new NBTTagCompound());
    }
    if(stack.getBoolean("invisible"))
    {
    return this.iconInvisible;
    }
    return this.itemIcon;
    }
    

    Et pour avec tout les items, comme je pense que tu veux aussi rendre invisible le joueur, le plus simple c'est de deny l'event PlayerRender.Pre. La tu as plus rien, totalement invisible.



  • @'robin4002':

    Et pour avec tout les items, comme je pense que tu veux aussi rendre invisible le joueur, le plus simple c'est de deny l'event PlayerRender.Pre. La tu as plus rien, totalement invisible.

    Je pense que c'est plus un item genre épée qui deviens invisible quand on a une potion d'invisibilité qui est recherché non ?


Log in to reply