Remove network-serialized item NBT from API layer, item NBT is now retained for the lifetime of the stack

This commit is contained in:
Dylan K. Taylor
2018-10-27 15:26:01 +01:00
parent d2513ff908
commit 9bb3c93285
7 changed files with 66 additions and 91 deletions

View File

@@ -181,7 +181,7 @@ abstract class BaseInventory implements Inventory{
public function contains(Item $item) : bool{
$count = max(1, $item->getCount());
$checkDamage = !$item->hasAnyDamageValue();
$checkTags = $item->hasCompoundTag();
$checkTags = $item->hasNamedTag();
foreach($this->getContents() as $i){
if($item->equals($i, $checkDamage, $checkTags)){
$count -= $i->getCount();
@@ -197,7 +197,7 @@ abstract class BaseInventory implements Inventory{
public function all(Item $item) : array{
$slots = [];
$checkDamage = !$item->hasAnyDamageValue();
$checkTags = $item->hasCompoundTag();
$checkTags = $item->hasNamedTag();
foreach($this->getContents() as $index => $i){
if($item->equals($i, $checkDamage, $checkTags)){
$slots[$index] = $i;
@@ -209,7 +209,7 @@ abstract class BaseInventory implements Inventory{
public function remove(Item $item) : void{
$checkDamage = !$item->hasAnyDamageValue();
$checkTags = $item->hasCompoundTag();
$checkTags = $item->hasNamedTag();
foreach($this->getContents() as $index => $i){
if($item->equals($i, $checkDamage, $checkTags)){
@@ -221,7 +221,7 @@ abstract class BaseInventory implements Inventory{
public function first(Item $item, bool $exact = false) : int{
$count = $exact ? $item->getCount() : max(1, $item->getCount());
$checkDamage = $exact || !$item->hasAnyDamageValue();
$checkTags = $exact || $item->hasCompoundTag();
$checkTags = $exact || $item->hasNamedTag();
foreach($this->getContents() as $index => $i){
if($item->equals($i, $checkDamage, $checkTags) and ($i->getCount() === $count or (!$exact and $i->getCount() > $count))){
@@ -249,7 +249,7 @@ abstract class BaseInventory implements Inventory{
public function canAddItem(Item $item) : bool{
$item = clone $item;
$checkDamage = !$item->hasAnyDamageValue();
$checkTags = $item->hasCompoundTag();
$checkTags = $item->hasNamedTag();
for($i = 0, $size = $this->getSize(); $i < $size; ++$i){
$slot = $this->getItem($i);
if($item->equals($slot, $checkDamage, $checkTags)){
@@ -342,7 +342,7 @@ abstract class BaseInventory implements Inventory{
}
foreach($itemSlots as $index => $slot){
if($slot->equals($item, !$slot->hasAnyDamageValue(), $slot->hasCompoundTag())){
if($slot->equals($item, !$slot->hasAnyDamageValue(), $slot->hasNamedTag())){
$amount = min($item->getCount(), $slot->getCount());
$slot->setCount($slot->getCount() - $amount);
$item->setCount($item->getCount() - $amount);

View File

@@ -197,7 +197,7 @@ class ShapedRecipe implements CraftingRecipe{
$given = $grid->getIngredient($reverse ? $this->width - $x - 1 : $x, $y);
$required = $this->getIngredient($x, $y);
if(!$required->equals($given, !$required->hasAnyDamageValue(), $required->hasCompoundTag()) or $required->getCount() > $given->getCount()){
if(!$required->equals($given, !$required->hasAnyDamageValue(), $required->hasNamedTag()) or $required->getCount() > $given->getCount()){
return false;
}
}

View File

@@ -81,7 +81,7 @@ class ShapelessRecipe implements CraftingRecipe{
if($item->getCount() <= 0){
break;
}
if($ingredient->equals($item, !$item->hasAnyDamageValue(), $item->hasCompoundTag())){
if($ingredient->equals($item, !$item->hasAnyDamageValue(), $item->hasNamedTag())){
unset($this->ingredients[$index]);
$item->pop();
}
@@ -124,7 +124,7 @@ class ShapelessRecipe implements CraftingRecipe{
foreach($this->ingredients as $needItem){
foreach($input as $j => $haveItem){
if($haveItem->equals($needItem, !$needItem->hasAnyDamageValue(), $needItem->hasCompoundTag()) and $haveItem->getCount() >= $needItem->getCount()){
if($haveItem->equals($needItem, !$needItem->hasAnyDamageValue(), $needItem->hasNamedTag()) and $haveItem->getCount() >= $needItem->getCount()){
unset($input[$j]);
continue 2;
}

View File

@@ -69,7 +69,7 @@ class CraftingTransaction extends InventoryTransaction{
$haveCount = 0;
foreach($txItems as $j => $txItem){
if($txItem->equals($recipeItem, !$wildcards or !$recipeItem->hasAnyDamageValue(), !$wildcards or $recipeItem->hasCompoundTag())){
if($txItem->equals($recipeItem, !$wildcards or !$recipeItem->hasAnyDamageValue(), !$wildcards or $recipeItem->hasNamedTag())){
$haveCount += $txItem->getCount();
unset($txItems[$j]);
}