Solved ItemStack not removing when amount is one?

Discussion in 'Plugin Development' started by belven000, Feb 9, 2014.

Thread Status:
Not open for further replies.
  1. Offline

    belven000

    Any ides/improvements for this, it works all they way down to 1 item in the stack:

    Code:java
    1.  
    2.  
    3. public boolean HasRequirements(Player playerToCheck)
    4. {
    5. int checksRequired = 0;
    6. Inventory playerInventory = playerToCheck.getInventory();
    7. List<ItemStack> requirements = GetAbilityRequirements();
    8.  
    9. for (int i = 0; i < requirements.size(); i++)
    10. {
    11. if (playerInventory.containsAtLeast(requirements.get(i), 1))
    12. {
    13. checksRequired++;
    14. }
    15. }
    16.  
    17. if (checksRequired == requirements.size())
    18. {
    19. ItemStack tempStack;
    20. int positionID;
    21. for (int i = 0; i < requirements.size(); i++)
    22. {
    23. positionID = playerInventory.first(requirements.get(i)
    24. .getType());
    25. tempStack = playerInventory.getItem(positionID);
    26. tempStack.setAmount(tempStack.getAmount() - 1);
    27. currentClass.classOwner().updateInventory();
    28. }
    29. return true;
    30. }
    31. else
    32. return false;
    33. }
    34.  
    35. @Override
    36. public List<ItemStack> GetAbilityRequirements()
    37. {
    38. List<ItemStack> tempRequirements = new ArrayList<ItemStack>();
    39. tempRequirements.add(new ItemStack(Material.WOOL));
    40. return tempRequirements;
    41. }


    I also understand that updateInventory() is old, how should I replace this?
     
  2. Offline

    Gater12

    belven000 I don't think there is an alternative to updateInventory()
    Try checking if the stack size is 1 then just set to air, or remove the item.
     
  3. Offline

    belven000

    lol, it's so obvious now :D

    Can't see a .remove, so would I set the type to MATERIAL.AIR?

    EDIT by Moderator: merged posts, please use the edit button instead of double posting.
     
    Last edited by a moderator: Jun 6, 2016
  4. Offline

    ItsLeandro

    Yeah just try that...
     
  5. Offline

    belven000

    @ItsLeandro
    This doesn't work?
    Code:java
    1. if (tempStack.getAmount() != 1)
    2. {
    3. tempStack.setAmount(tempStack.getAmount() - amountToTake);
    4. }
    5. else
    6. {
    7. tempStack.setType(Material.AIR);
    8. }


    Bump, really need to fix this, players can cast all the abilities from my mod infinitely!!!

    EDIT by Moderator: merged posts, please use the edit button instead of double posting.
     
    Last edited by a moderator: Jun 6, 2016
  6. Offline

    L33m4n123

    lets assume itemStack is a variable of an ItemStack that we want to remove an ammount stored in ammountToTake.
    Code:
    if(itemStack.getAmmount() > ammountToTake) {
    itemStack.setAmmount(itemStack.getAmmount() - ammountToTake);
    } else {
    itemStack.setType(Material.AIR);
    }
    Works for me like a charm
     
  7. Offline

    belven000

    I'll have another go but as far as I can see that's all I'm doing as well.

    Sorry but still no luck, here is what I'm doing:

    Code:java
    1. @SuppressWarnings("deprecation")
    2. public boolean HasRequirements(Player playerToCheck, int amountToTake)
    3. {
    4. int checksRequired = 0;
    5. Inventory playerInventory = playerToCheck.getInventory();
    6.  
    7. for (int i = 0; i < requirements.size(); i++)
    8. {
    9. if (playerInventory.containsAtLeast(requirements.get(i), 1))
    10. {
    11. checksRequired++;
    12. }
    13. }
    14.  
    15. if (checksRequired == requirements.size())
    16. {
    17. ItemStack tempStack;
    18. int positionID;
    19. for (int i = 0; i < requirements.size(); i++)
    20. {
    21. positionID = playerInventory.first(requirements.get(i)
    22. .getType());
    23. tempStack = playerInventory.getItem(positionID);
    24.  
    25. if (tempStack.getAmount() != 1)
    26. {
    27. tempStack.setAmount(tempStack.getAmount() - amountToTake);
    28. }
    29. else
    30. {
    31. tempStack.setType(Material.AIR);
    32. }
    33.  
    34. currentClass.classOwner().updateInventory();
    35. }
    36. return true;
    37. }
    38. else
    39. return false;
    40. }


    This is taken from here if you need to look at the whole class:
    https://github.com/belven/Classes/blob/master/src/belven/classes/Abilities/Ability.java
    From line 28.

    EDIT by Moderator: merged posts, please use the edit button instead of double posting.
     
    Last edited by a moderator: Jun 6, 2016
Thread Status:
Not open for further replies.

Share This Page