From 7ba573db7758f3a0229c2453fb631aac5a642d1e Mon Sep 17 00:00:00 2001 From: "Dylan K. Taylor" Date: Tue, 29 Jun 2021 19:52:52 +0100 Subject: [PATCH] Added API method Item::canStackWith() --- changelogs/4.0-snapshot.md | 1 + src/crafting/CraftingManager.php | 2 +- src/inventory/InventoryHelpersTrait.php | 4 ++-- src/inventory/transaction/CraftingTransaction.php | 2 +- src/inventory/transaction/InventoryTransaction.php | 2 +- src/item/Item.php | 7 +++++++ 6 files changed, 13 insertions(+), 5 deletions(-) diff --git a/changelogs/4.0-snapshot.md b/changelogs/4.0-snapshot.md index 035a3716e..29d3bb32a 100644 --- a/changelogs/4.0-snapshot.md +++ b/changelogs/4.0-snapshot.md @@ -660,6 +660,7 @@ However, if we add `src-namespace-prefix: pmmp\TesterPlugin` to the `plugin.yml` - `WritableBookPage` - The following API methods have been added: - `Armor->getArmorSlot()` + - `Item->canStackWith()`: returns whether the two items could be contained in the same inventory slot, ignoring count and stack size limits - `Potion->getType()`: returns a `PotionType` enum object containing information such as the applied effects - `ProjectileItem->createEntity()`: returns a new instance of the projectile entity that will be thrown - The following classes have been removed: diff --git a/src/crafting/CraftingManager.php b/src/crafting/CraftingManager.php index 50e1cc89a..c05dfc5e4 100644 --- a/src/crafting/CraftingManager.php +++ b/src/crafting/CraftingManager.php @@ -82,7 +82,7 @@ class CraftingManager{ foreach($items as $i => $item){ foreach($result as $otherItem){ - if($item->equals($otherItem)){ + if($item->canStackWith($otherItem)){ $otherItem->setCount($otherItem->getCount() + $item->getCount()); continue 2; } diff --git a/src/inventory/InventoryHelpersTrait.php b/src/inventory/InventoryHelpersTrait.php index 00bec34c7..1d6de457b 100644 --- a/src/inventory/InventoryHelpersTrait.php +++ b/src/inventory/InventoryHelpersTrait.php @@ -118,7 +118,7 @@ trait InventoryHelpersTrait{ $count = $item->getCount(); for($i = 0, $size = $this->getSize(); $i < $size; ++$i){ $slot = $this->getItem($i); - if($item->equals($slot)){ + if($item->canStackWith($slot)){ if(($diff = min($slot->getMaxStackSize(), $item->getMaxStackSize()) - $slot->getCount()) > 0){ $count -= $diff; } @@ -166,7 +166,7 @@ trait InventoryHelpersTrait{ $emptySlots[] = $i; } - if($slot->equals($item) and $item->getCount() < $item->getMaxStackSize()){ + if($slot->canStackWith($item) and $item->getCount() < $item->getMaxStackSize()){ $amount = min($item->getMaxStackSize() - $item->getCount(), $slot->getCount(), $this->getMaxStackSize()); if($amount > 0){ $slot->setCount($slot->getCount() - $amount); diff --git a/src/inventory/transaction/CraftingTransaction.php b/src/inventory/transaction/CraftingTransaction.php index d361b287c..0d13ccbed 100644 --- a/src/inventory/transaction/CraftingTransaction.php +++ b/src/inventory/transaction/CraftingTransaction.php @@ -84,7 +84,7 @@ class CraftingTransaction extends InventoryTransaction{ $recipeItem = array_pop($recipeItems); $needCount = $recipeItem->getCount(); foreach($recipeItems as $i => $otherRecipeItem){ - if($otherRecipeItem->equals($recipeItem)){ //make sure they have the same wildcards set + if($otherRecipeItem->canStackWith($recipeItem)){ //make sure they have the same wildcards set $needCount += $otherRecipeItem->getCount(); unset($recipeItems[$i]); } diff --git a/src/inventory/transaction/InventoryTransaction.php b/src/inventory/transaction/InventoryTransaction.php index 9b089126b..d79b07cd1 100644 --- a/src/inventory/transaction/InventoryTransaction.php +++ b/src/inventory/transaction/InventoryTransaction.php @@ -158,7 +158,7 @@ class InventoryTransaction{ foreach($needItems as $i => $needItem){ foreach($haveItems as $j => $haveItem){ - if($needItem->equals($haveItem)){ + if($needItem->canStackWith($haveItem)){ $amount = min($needItem->getCount(), $haveItem->getCount()); $needItem->setCount($needItem->getCount() - $amount); $haveItem->setCount($haveItem->getCount() - $amount); diff --git a/src/item/Item.php b/src/item/Item.php index afa34d8c8..bef3adb86 100644 --- a/src/item/Item.php +++ b/src/item/Item.php @@ -566,6 +566,13 @@ class Item implements \JsonSerializable{ (!$checkCompound or $this->getNamedTag()->equals($item->getNamedTag())); } + /** + * Returns whether this item could stack with the given item (ignoring stack size and count). + */ + final public function canStackWith(Item $other) : bool{ + return $this->equals($other, true, true); + } + /** * Returns whether the specified item stack has the same ID, damage, NBT and count as this item stack. */