diff --git a/src/block/Block.php b/src/block/Block.php index dbc269c6301..307fef2c594 100644 --- a/src/block/Block.php +++ b/src/block/Block.php @@ -982,4 +982,12 @@ public function calculateIntercept(Vector3 $pos1, Vector3 $pos2) : ?RayTraceResu return $currentHit; } + + /** + * Return items dropped by the block when it is broken by a player in gamemode creative + * @return Item[] + */ + public function getCreativeDrops() : array{ + return []; + } } diff --git a/src/block/ShulkerBox.php b/src/block/ShulkerBox.php index d557401eec3..8b25e0c6a31 100644 --- a/src/block/ShulkerBox.php +++ b/src/block/ShulkerBox.php @@ -31,6 +31,7 @@ use pocketmine\math\Vector3; use pocketmine\player\Player; use pocketmine\world\BlockTransaction; +use function count; class ShulkerBox extends Opaque{ use AnyFacingTrait; @@ -115,4 +116,16 @@ public function onInteract(Item $item, int $face, Vector3 $clickVector, ?Player public function getSupportType(int $facing) : SupportType{ return SupportType::NONE; } + + public function getCreativeDrops() : array{ + $shulker = $this->position->getWorld()->getTile($this->position); + if($shulker instanceof TileShulkerBox){ + if(count($shulker->getInventory()->getContents()) > 0){ + $drop = $this->asItem(); + $this->addDataFromTile($shulker, $drop); + return [$drop]; + } + } + return []; + } } diff --git a/src/event/attribute/Listener.php b/src/event/attribute/Listener.php new file mode 100644 index 00000000000..68537df6186 --- /dev/null +++ b/src/event/attribute/Listener.php @@ -0,0 +1,36 @@ +hasFiniteResources()){ $drops = array_merge(...array_map(fn(Block $block) => $block->getDrops($item), $affectedBlocks)); + }else{ + $drops = array_merge(...array_map(fn(Block $block) => $block->getCreativeDrops(), $affectedBlocks)); } $xpDrop = 0; diff --git a/tests/plugins/DevTools b/tests/plugins/DevTools index c6dca357c7e..39510af5bcf 160000 --- a/tests/plugins/DevTools +++ b/tests/plugins/DevTools @@ -1 +1 @@ -Subproject commit c6dca357c7e8a37ce3479a1bedfe849451e072e3 +Subproject commit 39510af5bcf19eef3b3157c8c51d88a736811591