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

View File

@ -37,9 +37,11 @@ use pocketmine\math\RayTraceResult;
use pocketmine\math\Vector3; use pocketmine\math\Vector3;
use pocketmine\metadata\Metadatable; use pocketmine\metadata\Metadatable;
use pocketmine\metadata\MetadataValue; use pocketmine\metadata\MetadataValue;
use pocketmine\nbt\tag\CompoundTag;
use pocketmine\network\mcpe\protocol\types\RuntimeBlockMapping; use pocketmine\network\mcpe\protocol\types\RuntimeBlockMapping;
use pocketmine\Player; use pocketmine\Player;
use pocketmine\plugin\Plugin; use pocketmine\plugin\Plugin;
use pocketmine\tile\Tile;
use pocketmine\tile\TileFactory; use pocketmine\tile\TileFactory;
use pocketmine\world\Position; use pocketmine\world\Position;
use pocketmine\world\World; 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. * Returns the item that players will equip when middle-clicking on this block.
*
* @param bool $addUserData
*
* @return Item * @return Item
*/ */
public function getPickedItem() : Item{ public function getPickedItem(bool $addUserData = false) : Item{
return $this->asItem(); $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); 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 return ItemFactory::get(Item::DYE, 3); //cocoa beans
} }
} }

View File

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

View File

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

View File

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