Supprimer un certain nombre d'item dans l'inventaire du joueur



  • Bonsoir,
    Comme vous l'avez lu, j'aimerais pouvoir supprimé par exemple 9 items de l'inventaire du joueur.

    J'ai la base de mon code mais je bloque, je ne vois pas comment faire du tout, si vous pouvez me donner un petit coup de pousse ça serrait super sympa 😉

    Code:

    
    if(player.inventory.hasItemStack(new ItemStack(CSCItems.item_lingottraite)))
                {
                for(int i = 0; i < player.inventory.getSizeInventory(); i++)
                {
                if(player.inventory.getStackInSlot(i) != null && player.inventory.getStackInSlot(i).getItem() == CSCItems.item_lingottraite)
                {
                System.out.println(i);
                player.inventory.removeStackFromSlot(i);//La ça supprime tout les items :/
                }
                }
                }
    
    

    Après ça je vois pas du tout j'ai tout essayer je galère depuis 2 heures sur un truc tout con j'en suis sur.


  • Modérateurs

    Les objets ItemStack ont une méthode pour changer la taille du stack (setStackSize surement), utilise ça plutôt.

    Et c'est normal que tous les items soient supprimés si tu dis au jeu de retirer le stack entier.



  • Bah il y stacksize mais je vois pas comment l"utiliser en fait ^^
    je sais que on peut faire: player.inventory.getStackInSlot(i).stacksize– ou ++ mais c'est pareil ça change tout les items ce qui est normal.



  • A mon avis, le problème viens du ==, utilise la méthode .equals(Object o) qui est plus approprié lorsqu'on travaille avec des objets.


  • Administrateurs

    Il faut mettre un break à la fin de la condition si tu veux que ça retire les items sur seulement un stack et pas sur tous ceux de l'inventaire.



  • @'robin4002':

    Il faut mettre un break à la fin de la condition si tu veux que ça retire les items sur seulement un stack et pas sur tous ceux de l'inventaire.

    En fait, les items que j'utilise ne se stack pas, mais tu penses que le break je peux le mettre après 8 slots parcourus ?


  • Administrateurs

    Ah, dans ce cas faut faire comme ça :

    
    if(player.inventory.hasItemStack(new ItemStack(CSCItems.item_lingottraite)))
    
    {
        int count = 0;
        for(int i = 0; i < player.inventory.getSizeInventory(); i++)
        {
               if(player.inventory.getStackInSlot(i) != null && player.inventory.getStackInSlot(i).getItem() == CSCItems.item_lingottraite)
               {
                    player.inventory.removeStackFromSlot(i);
                    count++;
                    if(count > 8)
                    {
                         break;
                    }
    
               }
         }
    }
    

    Ce genre d'information, ça serait bien de le préciser directement dans le premier message au lieu d'attendre 3 réponses …



  • Oui désolé.. merci!