From 37e12b81d09687b0f5f5716aba41e294fd017c49 Mon Sep 17 00:00:00 2001 From: "Luis C.M" Date: Tue, 28 Jun 2022 01:10:38 -0500 Subject: [PATCH] IPlayer: -Implemented removeItem, removeAllItems, and inventoryItemCount functions with "ignoreNBT" and "ignoreDamage" parameters. --- .../npcs/scripted/entity/ScriptPlayer.java | 111 ++++++++++-------- .../scripted/interfaces/entity/IPlayer.java | 39 +++--- 2 files changed, 88 insertions(+), 62 deletions(-) diff --git a/src/main/java/noppes/npcs/scripted/entity/ScriptPlayer.java b/src/main/java/noppes/npcs/scripted/entity/ScriptPlayer.java index 06133c160..e9d7c5012 100644 --- a/src/main/java/noppes/npcs/scripted/entity/ScriptPlayer.java +++ b/src/main/java/noppes/npcs/scripted/entity/ScriptPlayer.java @@ -327,19 +327,6 @@ public class ScriptPlayer extends ScriptLivingBase player.setGameType(WorldSettings.getGameTypeById(type)); } - /** - * @param item The item to be checked - * @return How many of this item the player has - */ - public int inventoryItemCount(IItemStack item){ - int i = 0; - for(ItemStack is : player.inventory.mainInventory){ - if (is != null && is.isItemEqual(item.getMCItemStack())) - i += is.stackSize; - } - return i; - } - /** * @since 1.7.10d * @return Returns a IItemStack array size 36 @@ -353,13 +340,49 @@ public class ScriptPlayer extends ScriptLivingBase } return items; } - + + public int inventoryItemCount(IItemStack item){ + return inventoryItemCount(item, true, true); + } + + /** + * @param item The item to be checked + * @return How many of this item the player has + */ + public int inventoryItemCount(IItemStack item, boolean ignoreNBT, boolean ignoreDamage) { + int i = 0; + for(ItemStack is : player.inventory.mainInventory){ + if (is != null && NoppesUtilPlayer.compareItems(is, item.getMCItemStack(), ignoreDamage, ignoreNBT)) { + i += is.stackSize; + } + } + return i; + } + + /** + * @since 1.7.10c + * @param id The items name + * @param damage The damage value + * @param amount How many will be removed + * @return Returns true if the items were removed succesfully. Returns false incase a bigger amount than what the player has was given or item doesnt exist + */ + public boolean removeItem(String id, int damage, int amount){ + Item item = (Item)Item.itemRegistry.getObject(id); + if(item == null) + return false; + return removeItem(NpcAPI.Instance().getIItemStack(new ItemStack(item, 1, damage)), amount); + } + + public boolean removeItem(IItemStack item, int amount){ + return removeItem(item, amount, true, true); + } + /** * @param item The Item type to be removed * @param amount How many will be removed * @return Returns true if the items were removed succesfully. Returns false incase a bigger amount than what the player has was given */ - public boolean removeItem(IItemStack item, int amount){ + public boolean removeItem(IItemStack item, int amount, boolean ignoreNBT, boolean ignoreDamage) { int count = inventoryItemCount(item); if(amount > count) return false; @@ -368,34 +391,41 @@ public class ScriptPlayer extends ScriptLivingBase else{ for(int i = 0; i < player.inventory.mainInventory.length; i++){ ItemStack is = player.inventory.mainInventory[i]; - if (is != null && is.isItemEqual(item.getMCItemStack())){ - if(amount > is.stackSize){ - player.inventory.mainInventory[i] = null; - amount -= is.stackSize; - } - else{ - is.splitStack(amount); - break; - } - } + if (is != null && NoppesUtilPlayer.compareItems(is, item.getMCItemStack(), ignoreDamage, ignoreNBT)) { + if(amount > is.stackSize){ + player.inventory.mainInventory[i] = null; + amount -= is.stackSize; + } + else{ + is.splitStack(amount); + break; + } + } } } this.updatePlayerInventory(); return true; } + public void removeAllItems(IItemStack item){ + removeAllItems(item, true, true); + } + /** - * @since 1.7.10c - * @param id The items name - * @param damage The damage value - * @param amount How many will be removed - * @return Returns true if the items were removed succesfully. Returns false incase a bigger amount than what the player has was given or item doesnt exist + * @param item The item to be removed from the players inventory */ - public boolean removeItem(String id, int damage, int amount){ - Item item = (Item)Item.itemRegistry.getObject(id); - if(item == null) - return false; - return removeItem(NpcAPI.Instance().getIItemStack(new ItemStack(item, 1, damage)), amount); + public int removeAllItems(IItemStack item, boolean ignoreNBT, boolean ignoreDamage){ + int removed = 0; + + for(int i = 0; i < player.inventory.mainInventory.length; i++) { + ItemStack is = player.inventory.mainInventory[i]; + if (is != null && NoppesUtilPlayer.compareItems(is, item.getMCItemStack(), ignoreDamage, ignoreNBT)) { + player.inventory.mainInventory[i] = null; + removed++; + } + } + + return removed; } /** @@ -445,17 +475,6 @@ public class ScriptPlayer extends ScriptLivingBase public void resetSpawnpoint(){ player.setSpawnChunk(null, false); } - - /** - * @param item The item to be removed from the players inventory - */ - public void removeAllItems(IItemStack item){ - for(int i = 0; i < player.inventory.mainInventory.length; i++){ - ItemStack is = player.inventory.mainInventory[i]; - if (is != null && is.isItemEqual(item.getMCItemStack())) - player.inventory.mainInventory[i] = null; - } - } public void clearInventory() { for(int i = 0; i < player.inventory.mainInventory.length; i++) player.inventory.mainInventory[i] = null; diff --git a/src/main/java/noppes/npcs/scripted/interfaces/entity/IPlayer.java b/src/main/java/noppes/npcs/scripted/interfaces/entity/IPlayer.java index f102f40ce..9ecd82d75 100644 --- a/src/main/java/noppes/npcs/scripted/interfaces/entity/IPlayer.java +++ b/src/main/java/noppes/npcs/scripted/interfaces/entity/IPlayer.java @@ -115,12 +115,6 @@ public interface IPlayer extends IEntityLivingBase */ void setMode(int type); - /** - * @param item The item to be checked - * @return How many of this item the player has - */ - int inventoryItemCount(IItemStack item); - /** * @since 1.7.10d * @return Returns a IItemStack array size 36 @@ -128,21 +122,39 @@ public interface IPlayer extends IEntityLivingBase IItemStack[] getInventory(); /** - * @param item The Item type to be removed - * @param amount How many will be removed - * @return Returns true if the items were removed succesfully. Returns false incase a bigger amount than what the player has was given + * @param item The item to be checked + * @param ignoreNBT Whether the item's NBT tags will be checked to be equal + * @param ignoreDamage Whether the item's damage will be checked to be equal + * @return How many of this item the player has */ - boolean removeItem(IItemStack item, int amount); + int inventoryItemCount(IItemStack item, boolean ignoreNBT, boolean ignoreDamage); /** * @since 1.7.10c * @param id The items name * @param damage The damage value * @param amount How many will be removed - * @return Returns true if the items were removed succesfully. Returns false incase a bigger amount than what the player has was given or item doesnt exist + * @return True if the items were removed succesfully. Returns false incase a bigger amount than what the player has was given or item doesnt exist */ boolean removeItem(String id, int damage, int amount); + /** + * @param item The Item type to be removed + * @param amount How many will be removed + * @param ignoreNBT Whether the item's NBT tags will be checked to be equal + * @param ignoreDamage Whether the item's damage will be checked to be equal + * @return True if the items were removed succesfully. Returns false incase a bigger amount than what the player has was given + */ + boolean removeItem(IItemStack item, int amount, boolean ignoreNBT, boolean ignoreDamage); + + /** + * @param item The item to be removed from the players inventory + * @param ignoreNBT Whether the item's NBT tags will be checked to be equal + * @param ignoreDamage Whether the item's damage will be checked to be equal + * @return The amount of item stacks that were removed + */ + int removeAllItems(IItemStack item, boolean ignoreNBT, boolean ignoreDamage); + /** * @since 1.7.10c * @param item Item to be added @@ -170,11 +182,6 @@ public interface IPlayer extends IEntityLivingBase void resetSpawnpoint(); - /** - * @param item The item to be removed from the players inventory - */ - void removeAllItems(IItemStack item); - void setRotation(float rotationYaw, float rotationPitch); void disableMouseInput(long time, int... buttonIds);