• S'inscrire
    • Se connecter
    • Recherche
    • Récent
    • Mots-clés
    • Populaire
    • Utilisateurs
    • Groupes

    Résolu Savoir si un item est présent dans l'inventaire

    1.7.x
    1.7.10
    4
    27
    5326
    Charger plus de messages
    • Du plus ancien au plus récent
    • Du plus récent au plus ancien
    • Les plus votés
    Répondre
    • Répondre à l'aide d'un nouveau sujet
    Se connecter pour répondre
    Ce sujet a été supprimé. Seuls les utilisateurs avec les droits d'administration peuvent le voir.
    • Y
      yveslefou dernière édition par

      Bonjour à tous. Je souhaiterais vérifier si un item que j’ais crée est dans un slot de l’inventaire du joueur , l’item mana (son nom non localisé). J’ais mis cela dans un onItemRightClick :

      int i = 0;
      for(i = 0; i < Minecraft.getMinecraft().thePlayer.inventory.getSizeInventory(); i++){
      if(Minecraft.getMinecraft().thePlayer.inventory.getStackInSlot(i) == Minecraft.getMinecraft().thePlayer.inventory.getStackInSlot(i).getItem())== Items.Mana){
      //Ce que je souhaite faire
      }
      }

      mais je ne sais pas pourquoi quand je fais un clic droit avec l’item il ne ce passe rien. Quelqu’un pourrait m’aider ?

      1 réponse Dernière réponse Répondre Citer 0
      • BrokenSwing
        BrokenSwing Moddeurs confirmés Rédacteurs dernière édition par

        Un extrait de mon mod où je parcours l’inventaire du joueur :

        
        for(int i = 0; i < player.inventory.getSizeInventory() && !founded; i++)
        {
        if(player.inventory.getStackInSlot(i) != null)
        {
        if(player.inventory.getStackInSlot(i).getItem() instanceof AbstractItemEnergyStorage)
        {
        if(((AbstractItemEnergyStorage)player.inventory.getStackInSlot(i).getItem()).getEnergyType(player.inventory.getStackInSlot(i)) == type)
        {
        slot = i;
        founded = true;
        }
        }
        }
        }
        
        

        A la fin je sais que la première itirérance de mon item est dans le slot n° “slot” (la variable slot du code)

        1 réponse Dernière réponse Répondre Citer 0
        • SCAREX
          SCAREX dernière édition par

          Il y a déjà une fonction dans l’inventaire il me semble

          Site web contenant mes scripts : http://SCAREXgaming.github.io

          Pas de demandes de support par MP ni par skype SVP.
          Je n'accepte sur skype que l…

          1 réponse Dernière réponse Répondre Citer 0
          • BrokenSwing
            BrokenSwing Moddeurs confirmés Rédacteurs dernière édition par

            Possible :
            player.inventory.hasItem(p_146028_1_)
            player.inventory.hasItemStack(p_146028_1_)

            1 réponse Dernière réponse Répondre Citer 1
            • Dylem
              Dylem dernière édition par

              Bonjour,

              Tu as dit que tu utilisais la fonction OnItemRightClick, et cette fonction a comme paramètre EntityPlayer player
              Tout ce que tu dois faire c’est cela :

              public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player) {
              
              if (!world.isRemote && player.getHeldItem() == TonItem {
              }
              }
              

              Si tu veux juste vérifier que le joueur a cet Item dans son inventaire :

              public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player) {
              
              if (!world.isRemote && player.inventory.hasItemStack(stack))  {
              }
              }
              

              PS : le !world.isRemote est important sinon l’effet sera appelé deux fois !

              Si je t'ai aidé, n'hésite pas à cliquer sur le nombre vert en dessous de mon image de profil, pour me le faire savoir. Ca me motive pour continuer …

              1 réponse Dernière réponse Répondre Citer 1
              • Y
                yveslefou dernière édition par

                @‘Dylem’:

                Bonjour,

                Tu as dit que tu utilisais la fonction OnItemRightClick, et cette fonction a comme paramètre EntityPlayer player
                Tout ce que tu dois faire c’est cela :

                public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player) {
                
                if (!world.isRemote && player.getHeldItem() == TonItem {
                }
                }
                

                Si tu veux juste vérifier que le joueur a cet Item dans son inventaire :

                public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player) {
                
                if (!world.isRemote && player.inventory.hasItemStack(stack))  {
                }
                }
                

                PS : le !world.isRemote est important sinon l’effet sera appelé deux fois !

                J’ais déja eu le soucie du message et des effets qui s’affiche deux fois donc déjà un grand merci à toi pour le '!world.isRemote. Mais j’aimerais que tu m’explique dans le second code que tu viens de me donner (celui avec hasItemStack) où l’item est vérifié ?

                1 réponse Dernière réponse Répondre Citer 0
                • Dylem
                  Dylem dernière édition par

                  excuse-moi, j’ai répondu trop rapidement. Ce serait plutôt ça :

                  
                  1.  **public** ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player) {
                  2.  **if** (!world.isRemote && player.inventory.hasItemStack(new ItemStack(tonItem)))  {
                  3.  }
                  4.  }
                  
                  

                  Si je t'ai aidé, n'hésite pas à cliquer sur le nombre vert en dessous de mon image de profil, pour me le faire savoir. Ca me motive pour continuer …

                  1 réponse Dernière réponse Répondre Citer 0
                  • BrokenSwing
                    BrokenSwing Moddeurs confirmés Rédacteurs dernière édition par

                    L’item que l’on vérifie est celui en argument de la fonction hasItemStack(ItemStack stack) et il existe aussi hasItem(Item item)

                    1 réponse Dernière réponse Répondre Citer 0
                    • Y
                      yveslefou dernière édition par

                      @‘Dylem’:

                      excuse-moi, j’ai répondu trop rapidement. Ce serait plutôt ça :

                      
                      1.  **public** ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player) {
                      2.  **if** (!world.isRemote && player.inventory.hasItemStack(new ItemStack(tonItem)))  {
                      3.  }
                      4.  }
                      
                      

                      A merci, tu m’aides énormément la tu peus pas savoir :3 juste dernier petite chose c’est bien le nom non localisé que je dois mettre à la place du ‘tonItem’ ? Juste pour être sur

                      1 réponse Dernière réponse Répondre Citer 0
                      • Dylem
                        Dylem dernière édition par

                        Pas du tout, c’est l’Item lui même. Par exemple, pour une pomme, ce serait Items.apple (Pour ton Item ce serait donc TonFichierDenregistrement.TonItem)

                        Si je t'ai aidé, n'hésite pas à cliquer sur le nombre vert en dessous de mon image de profil, pour me le faire savoir. Ca me motive pour continuer …

                        1 réponse Dernière réponse Répondre Citer 1
                        • Y
                          yveslefou dernière édition par

                          @‘Dylem’:

                          Pas du tout, c’est l’Item lui même. Par exemple, pour une pomme, ce serait Items.apple (Pour ton Item ce serait donc TonFichierDenregistrement.TonItem)

                          Un énorme merci pour ton aide mais j’ais du faire une erreur idiote car j’ais pas de message ou d’effet quand je fais un clic droit avec :

                          public class Sort1 extends Item{

                          public ItemStack onItemRightClick(World world,ItemStack stack,EntityPlayer player)
                          {
                          if (!world.isRemote && player.inventory.hasItemStack(new ItemStack(Main.Mana))) {
                          player.addPotionEffect(new PotionEffect(3, 200, 2));

                          }
                          else{
                          player.addChatMessage(new ChatComponentText(“[Magie] Mana insuffisant”));
                          }
                          return stack ;

                          }
                          }

                          1 réponse Dernière réponse Répondre Citer 0
                          • Dylem
                            Dylem dernière édition par

                            J’ai testé ceci et ça marche :

                            public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player) {
                            if (!world.isRemote && player.inventory.hasItemStack(new ItemStack(Items.apple))) {
                            System.out.println("j'ai une pomme !");
                            }
                            }
                            

                            Le problème vient donc d’autre chose, eclipse ne te met pas d’erreur sur le Main.mana ?

                            Sinon, ça pourrait venir du fait que tu n’aies pas de constructeur

                            public Sort1(String name) {
                            this.setUnlocalizedName(name);
                            }
                            

                            par exemple.

                            Si je t'ai aidé, n'hésite pas à cliquer sur le nombre vert en dessous de mon image de profil, pour me le faire savoir. Ca me motive pour continuer …

                            1 réponse Dernière réponse Répondre Citer 0
                            • BrokenSwing
                              BrokenSwing Moddeurs confirmés Rédacteurs dernière édition par

                              Les Item n’ont pas forcement besoin d’un constructeur, ensuite il est possible que l’itemstack de mana qu’il ai sur lui n’est pas le même métadata (vu que c’est un truc de mana j’imagine que ce n’est pas infini et du coup ya une durabilité où un truc comme ça (peut-être));
                              Et les arguments de la fonctions ne sont pas bons
                              Donc utilise plutôt :

                              
                              public class Sort1 extends Item{
                              
                              public ItemStack onItemRightClick(ItemStack itemStackIn, World world, EntityPlayer player)
                              {
                              if (!world.isRemote && player.inventory.hasItem(Main.Mana)) {
                              player.addPotionEffect(new PotionEffect(3, 200, 2));
                              
                              }
                              else{
                              player.addChatMessage(new ChatComponentText("[Magie] Mana insuffisant"));
                              }
                              return stack ;
                              
                              }
                              }
                              
                              
                              1 réponse Dernière réponse Répondre Citer 0
                              • Y
                                yveslefou dernière édition par

                                J’avais lue sur le site de minecraft forge france qu’il n’y avais plus besoin de constructeur en 1.7.10. Du coup cela ce résume par le codes suivant de la main :

                                Mana = new Mana().setUnlocalizedName(“Mana_”).setTextureName(MODID +“:Sort 1”).setCreativeTab(CreativeTabs.tabMaterials);
                                GameRegistry.registerItem(Mana, “Ma_na”);

                                Il y aussi une class de faite pour le mana mais elle est vide du coup je vais déjà voir pour ce que tu viens de me dire et me renseigner sur les constructeurs. Un énorme merci à toi ^^

                                1 réponse Dernière réponse Répondre Citer 0
                                • BrokenSwing
                                  BrokenSwing Moddeurs confirmés Rédacteurs dernière édition par

                                  Le problème vient du fait que les arguments de la fonctions ne sont pas le bon ordre, le constructeur n’a rien à voir

                                  1 réponse Dernière réponse Répondre Citer 0
                                  • Y
                                    yveslefou dernière édition par

                                    @‘BrokenSwing’:

                                    Les Item n’ont pas forcement besoin d’un constructeur, ensuite il est possible que l’itemstack de mana qu’il ai sur lui n’est pas le même métadata (vu que c’est un truc de mana j’imagine que ce n’est pas infini et du coup ya une durabilité où un truc comme ça (peut-être));
                                    Et les arguments de la fonctions ne sont pas bons
                                    Donc utilise plutôt :

                                    
                                    public class Sort1 extends Item{
                                    
                                    public ItemStack onItemRightClick(ItemStack itemStackIn, World world, EntityPlayer player)
                                    {
                                    if (!world.isRemote && player.inventory.hasItem(Main.Mana)) {
                                    player.addPotionEffect(new PotionEffect(3, 200, 2));
                                    
                                    }
                                    else{
                                    player.addChatMessage(new ChatComponentText("[Magie] Mana insuffisant"));
                                    }
                                    return stack ;
                                    
                                    }
                                    }
                                    
                                    

                                    Il n’y a pas de méthadata mais il est vrai que j’avais les avais mis dans le mauvais ordre sans m’en rendre compte mais maintenant bien que j’ais mes manas dans l’inventaire cela les détecte pas mais je pense que je peus régler sa en regardant un peu merci beaucoup

                                    1 réponse Dernière réponse Répondre Citer 0
                                    • BrokenSwing
                                      BrokenSwing Moddeurs confirmés Rédacteurs dernière édition par

                                      Non je parle de l’ORDRE, d’abord l’ItemStack, puis le World puis l’EntityPlayer, tu peut laisser stack comme nom de varariable
                                      EDIT : Quand tu override une fonction pense toujours à l’annoté comme ça tu sais si tu as fait une erreur

                                      1 réponse Dernière réponse Répondre Citer 1
                                      • Dylem
                                        Dylem dernière édition par

                                        J’ai testé le code en 1.8.9 donc je ne peux pas garantir qu’il marche en 1.7, sinon par convention on ne donne pas de majuscule aux variables 😉
                                        Tu as bien définit ton Item en public static ?

                                        Si je t'ai aidé, n'hésite pas à cliquer sur le nombre vert en dessous de mon image de profil, pour me le faire savoir. Ca me motive pour continuer …

                                        1 réponse Dernière réponse Répondre Citer 0
                                        • Y
                                          yveslefou dernière édition par

                                          Oui il est bien en public ^^

                                          1 réponse Dernière réponse Répondre Citer 0
                                          • BrokenSwing
                                            BrokenSwing Moddeurs confirmés Rédacteurs dernière édition par

                                            Il faut que ta fonction soit comme ça et c’est tout :

                                            
                                            @Override
                                            public ItemStack onItemRightClick(ItemStack stack, World world,EntityPlayer player)
                                            {
                                            if (!world.isRemote && player.inventory.hasItemStack(new ItemStack(Main.Mana))) {
                                            player.addPotionEffect(new PotionEffect(3, 200, 2));
                                            
                                            }
                                            else{
                                            player.addChatMessage(new ChatComponentText("[Magie] Mana insuffisant"));
                                            }
                                            return stack ;
                                            
                                            }
                                            }
                                            
                                            
                                            1 réponse Dernière réponse Répondre Citer 0
                                            • 1
                                            • 2
                                            • 1 / 2
                                            • Premier message
                                              Dernier message
                                            Design by Woryk
                                            Contact / Mentions Légales

                                            MINECRAFT FORGE FRANCE © 2018

                                            Powered by NodeBB