Fixed durability handling (ish)

This commit is contained in:
Dylan K. Taylor
2022-06-29 15:17:16 +01:00
parent dd63681f94
commit 2cb722b674
3 changed files with 20 additions and 28 deletions

View File

@ -36,9 +36,12 @@ use pocketmine\data\bedrock\EntityLegacyIds;
use pocketmine\data\bedrock\item\ItemTypeIds as Ids;
use pocketmine\data\bedrock\item\SavedItemData as Data;
use pocketmine\data\bedrock\PotionTypeIdMap;
use pocketmine\item\Durable;
use pocketmine\item\Item;
use pocketmine\item\VanillaItems as Items;
use pocketmine\nbt\NbtException;
use pocketmine\utils\AssumptionFailedError;
use function min;
final class ItemDeserializer{
/**
@ -91,7 +94,16 @@ final class ItemDeserializer{
$itemStack->setCount($data->getCount());
if(($tagTag = $data->getTypeData()->getTag()) !== null){
$itemStack->setNamedTag(clone $tagTag);
try{
$itemStack->setNamedTag(clone $tagTag);
}catch(NbtException $e){
throw new ItemTypeDeserializeException("Invalid item saved NBT: " . $e->getMessage(), 0, $e);
}
}
//TODO: this hack is necessary to get legacy tools working - we need a better way to handle this kind of stuff
if($itemStack instanceof Durable && $itemStack->getDamage() === 0 && ($damage = $data->getTypeData()->getMeta()) > 0){
$itemStack->setDamage(min($damage, $itemStack->getMaxDurability()));
}
//TODO: canDestroy, canPlaceOn, wasPickedUp are currently unused