Move responsibility of copying block-picked item NBT to Block instead of Player

This commit is contained in:
Dylan K. Taylor 2019-05-25 19:00:11 +01:00
parent c29523baf4
commit 066eadd687
10 changed files with 29 additions and 24 deletions

View File

@ -105,7 +105,6 @@ use pocketmine\permission\PermissionAttachment;
use pocketmine\permission\PermissionAttachmentInfo;
use pocketmine\permission\PermissionManager;
use pocketmine\plugin\Plugin;
use pocketmine\tile\Tile;
use pocketmine\timings\Timings;
use pocketmine\utils\TextFormat;
use pocketmine\utils\UUID;
@ -1837,17 +1836,7 @@ class Player extends Human implements CommandSender, ChunkLoader, ChunkListener,
return true;
}
$item = $block->getPickedItem();
if($addTileNBT){
$tile = $this->getWorld()->getTile($block);
if($tile instanceof Tile){
$nbt = $tile->getCleanedNBT();
if($nbt instanceof CompoundTag){
$item->setCustomBlockData($nbt);
$item->setLore(["+(DATA)"]);
}
}
}
$item = $block->getPickedItem($addTileNBT);
$ev = new PlayerBlockPickEvent($this, $block, $item);
$ev->call();

View File

@ -42,7 +42,7 @@ class Beetroot extends Crops{
];
}
public function getPickedItem() : Item{
public function getPickedItem(bool $addUserData = false) : Item{
return ItemFactory::get(Item::BEETROOT_SEEDS);
}
}

View File

@ -37,9 +37,11 @@ use pocketmine\math\RayTraceResult;
use pocketmine\math\Vector3;
use pocketmine\metadata\Metadatable;
use pocketmine\metadata\MetadataValue;
use pocketmine\nbt\tag\CompoundTag;
use pocketmine\network\mcpe\protocol\types\RuntimeBlockMapping;
use pocketmine\Player;
use pocketmine\plugin\Plugin;
use pocketmine\tile\Tile;
use pocketmine\tile\TileFactory;
use pocketmine\world\Position;
use pocketmine\world\World;
@ -500,10 +502,24 @@ class Block extends Position implements BlockLegacyIds, Metadatable{
/**
* Returns the item that players will equip when middle-clicking on this block.
*
* @param bool $addUserData
*
* @return Item
*/
public function getPickedItem() : Item{
return $this->asItem();
public function getPickedItem(bool $addUserData = false) : Item{
$item = $this->asItem();
if($addUserData){
$tile = $this->world->getTile($this);
if($tile instanceof Tile){
$nbt = $tile->getCleanedNBT();
if($nbt instanceof CompoundTag){
$item->setCustomBlockData($nbt);
$item->setLore(["+(DATA)"]);
}
}
}
return $item;
}
/**

View File

@ -35,7 +35,7 @@ class Carrot extends Crops{
];
}
public function getPickedItem() : Item{
public function getPickedItem(bool $addUserData = false) : Item{
return ItemFactory::get(Item::CARROT);
}
}

View File

@ -118,7 +118,7 @@ class CocoaBlock extends Transparent{
];
}
public function getPickedItem() : Item{
public function getPickedItem(bool $addUserData = false) : Item{
return ItemFactory::get(Item::DYE, 3); //cocoa beans
}
}

View File

@ -105,7 +105,7 @@ class Farmland extends Transparent{
return false;
}
public function getPickedItem() : Item{
public function getPickedItem(bool $addUserData = false) : Item{
return ItemFactory::get(Item::DIRT);
}
}

View File

@ -150,8 +150,8 @@ class FlowerPot extends Flowable{
return $items;
}
public function getPickedItem() : Item{
return $this->plant !== null ? $this->plant->asItem() : parent::getPickedItem();
public function getPickedItem(bool $addUserData = false) : Item{
return $this->plant !== null ? $this->plant->asItem() : parent::getPickedItem($addUserData);
}
public function isAffectedBySilkTouch() : bool{

View File

@ -197,8 +197,8 @@ class ItemFrame extends Flowable{
return $drops;
}
public function getPickedItem() : Item{
return $this->framedItem !== null ? clone $this->framedItem : parent::getPickedItem();
public function getPickedItem(bool $addUserData = false) : Item{
return $this->framedItem !== null ? clone $this->framedItem : parent::getPickedItem($addUserData);
}
public function isAffectedBySilkTouch() : bool{

View File

@ -35,7 +35,7 @@ class Potato extends Crops{
];
}
public function getPickedItem() : Item{
public function getPickedItem(bool $addUserData = false) : Item{
return ItemFactory::get(Item::POTATO);
}
}

View File

@ -42,7 +42,7 @@ class Wheat extends Crops{
}
}
public function getPickedItem() : Item{
public function getPickedItem(bool $addUserData = false) : Item{
return ItemFactory::get(Item::WHEAT_SEEDS);
}
}