From 3ec59504bebf03ad76b4b5edd5fc37553000f37a Mon Sep 17 00:00:00 2001 From: ShockedPlot7560 <66992287+ShockedPlot7560@users.noreply.github.com> Date: Tue, 14 Dec 2021 23:32:50 +0100 Subject: [PATCH 1/9] Fix creative drop when breaking block fixes https://github.com/pmmp/PocketMine-MP/issues/4417 --- src/block/Block.php | 15 +++++++++++++++ src/block/ShulkerBox.php | 19 +++++++++++++++++++ src/world/World.php | 4 ++++ 3 files changed, 38 insertions(+) diff --git a/src/block/Block.php b/src/block/Block.php index 414d9b6494c..74679234339 100644 --- a/src/block/Block.php +++ b/src/block/Block.php @@ -634,4 +634,19 @@ 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 []; + } + + /** + * Return xp dropped by the block when it is broken by a player in gamemode creative + */ + public function getCreativeXpDrop(): int{ + return 0; + } } diff --git a/src/block/ShulkerBox.php b/src/block/ShulkerBox.php index a81e5009d93..38c6e1bd662 100644 --- a/src/block/ShulkerBox.php +++ b/src/block/ShulkerBox.php @@ -26,6 +26,7 @@ use pocketmine\block\tile\ShulkerBox as TileShulkerBox; use pocketmine\block\utils\AnyFacingTrait; use pocketmine\item\Item; +use pocketmine\item\VanillaItems; use pocketmine\math\Vector3; use pocketmine\player\Player; use pocketmine\world\BlockTransaction; @@ -103,4 +104,22 @@ public function onInteract(Item $item, int $face, Vector3 $clickVector, ?Player return true; } + + public function getCreativeDrops(): array{ + $shulker = $this->position->getWorld()->getTile($this->position); + if($shulker instanceof TileShulkerBox){ + $empty = true; + for ($i=0; $i < $shulker->getInventory()->getSize() && $empty; $i++) { + if($shulker->getInventory()->getItem($i)->getId() != 0){ + $empty = false; + } + } + if(!$empty){ + $drop = $this->asItem(); + $this->addDataFromTile($shulker, $drop); + return [$drop]; + } + } + return []; + } } diff --git a/src/world/World.php b/src/world/World.php index 6d3aa67125e..bcce122bc26 100644 --- a/src/world/World.php +++ b/src/world/World.php @@ -1693,11 +1693,15 @@ public function useBreakOn(Vector3 $vector, Item &$item = null, ?Player $player $drops = []; if($player === null or $player->hasFiniteResources()){ $drops = array_merge(...array_map(fn(Block $block) => $block->getDrops($item), $affectedBlocks)); + }elseif($player->isCreative()){ + $drops = array_merge(...array_map(fn(Block $block) => $block->getCreativeDrops(), $affectedBlocks)); } $xpDrop = 0; if($player !== null and $player->hasFiniteResources()){ $xpDrop = array_sum(array_map(fn(Block $block) => $block->getXpDropForTool($item), $affectedBlocks)); + }elseif($player === null || $player->isCreative()){ + $xpDrop = array_sum(array_map(fn(Block $block) => $block->getCreativeXpDrop(), $affectedBlocks)); } if($player !== null){ From 42c7d05c7180cc446d8a8c7c4c9cc89ef29e5c00 Mon Sep 17 00:00:00 2001 From: ShockedPlot7560 <66992287+ShockedPlot7560@users.noreply.github.com> Date: Tue, 14 Dec 2021 23:44:19 +0100 Subject: [PATCH 2/9] fix: style --- src/block/ShulkerBox.php | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/block/ShulkerBox.php b/src/block/ShulkerBox.php index 38c6e1bd662..f83f75b33c2 100644 --- a/src/block/ShulkerBox.php +++ b/src/block/ShulkerBox.php @@ -26,7 +26,6 @@ use pocketmine\block\tile\ShulkerBox as TileShulkerBox; use pocketmine\block\utils\AnyFacingTrait; use pocketmine\item\Item; -use pocketmine\item\VanillaItems; use pocketmine\math\Vector3; use pocketmine\player\Player; use pocketmine\world\BlockTransaction; @@ -109,7 +108,7 @@ public function getCreativeDrops(): array{ $shulker = $this->position->getWorld()->getTile($this->position); if($shulker instanceof TileShulkerBox){ $empty = true; - for ($i=0; $i < $shulker->getInventory()->getSize() && $empty; $i++) { + for($i=0; $i < $shulker->getInventory()->getSize() && $empty; $i++) { if($shulker->getInventory()->getItem($i)->getId() != 0){ $empty = false; } From a63cfdc93e99aba592d024d0dee3d83b1997dc2b Mon Sep 17 00:00:00 2001 From: ShockedPlot7560 <66992287+ShockedPlot7560@users.noreply.github.com> Date: Wed, 15 Dec 2021 16:57:11 +0100 Subject: [PATCH 3/9] Update src/block/ShulkerBox.php Co-authored-by: Dylan T. --- src/block/ShulkerBox.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/block/ShulkerBox.php b/src/block/ShulkerBox.php index f83f75b33c2..daed55d443e 100644 --- a/src/block/ShulkerBox.php +++ b/src/block/ShulkerBox.php @@ -109,7 +109,7 @@ public function getCreativeDrops(): array{ if($shulker instanceof TileShulkerBox){ $empty = true; for($i=0; $i < $shulker->getInventory()->getSize() && $empty; $i++) { - if($shulker->getInventory()->getItem($i)->getId() != 0){ + if(!$shulker->getInventory()->getItem($i)->isNull()){ $empty = false; } } From f7d81425c05fe1adb7153802e03e7df02c91a7c6 Mon Sep 17 00:00:00 2001 From: ShockedPlot7560 <66992287+ShockedPlot7560@users.noreply.github.com> Date: Wed, 15 Dec 2021 18:45:29 +0100 Subject: [PATCH 4/9] remove: getCreativeXpDrop() --- src/block/Block.php | 7 ------- 1 file changed, 7 deletions(-) diff --git a/src/block/Block.php b/src/block/Block.php index 74679234339..e1e9053a098 100644 --- a/src/block/Block.php +++ b/src/block/Block.php @@ -642,11 +642,4 @@ public function calculateIntercept(Vector3 $pos1, Vector3 $pos2) : ?RayTraceResu public function getCreativeDrops(): array{ return []; } - - /** - * Return xp dropped by the block when it is broken by a player in gamemode creative - */ - public function getCreativeXpDrop(): int{ - return 0; - } } From 4ac7cfe6baf4a084e879d68015ebf865155d7fee Mon Sep 17 00:00:00 2001 From: ShockedPlot7560 <66992287+ShockedPlot7560@users.noreply.github.com> Date: Wed, 15 Dec 2021 18:46:19 +0100 Subject: [PATCH 5/9] reduce code for getCreativeDrops() --- src/block/ShulkerBox.php | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/src/block/ShulkerBox.php b/src/block/ShulkerBox.php index f83f75b33c2..2dc726e5e4f 100644 --- a/src/block/ShulkerBox.php +++ b/src/block/ShulkerBox.php @@ -107,13 +107,7 @@ public function onInteract(Item $item, int $face, Vector3 $clickVector, ?Player public function getCreativeDrops(): array{ $shulker = $this->position->getWorld()->getTile($this->position); if($shulker instanceof TileShulkerBox){ - $empty = true; - for($i=0; $i < $shulker->getInventory()->getSize() && $empty; $i++) { - if($shulker->getInventory()->getItem($i)->getId() != 0){ - $empty = false; - } - } - if(!$empty){ + if(count($shulker->getInventory()->getContents()) > 0){ $drop = $this->asItem(); $this->addDataFromTile($shulker, $drop); return [$drop]; From cc83011ae53734d2c3ffba9055a2c137865c323f Mon Sep 17 00:00:00 2001 From: ShockedPlot7560 <66992287+ShockedPlot7560@users.noreply.github.com> Date: Wed, 15 Dec 2021 18:51:05 +0100 Subject: [PATCH 6/9] Fixed CS --- src/block/Block.php | 2 +- src/block/ShulkerBox.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/block/Block.php b/src/block/Block.php index e1e9053a098..7a9a280eaf9 100644 --- a/src/block/Block.php +++ b/src/block/Block.php @@ -639,7 +639,7 @@ public function calculateIntercept(Vector3 $pos1, Vector3 $pos2) : ?RayTraceResu * Return items dropped by the block when it is broken by a player in gamemode creative * @return Item[] */ - public function getCreativeDrops(): array{ + public function getCreativeDrops() : array{ return []; } } diff --git a/src/block/ShulkerBox.php b/src/block/ShulkerBox.php index 2dc726e5e4f..7e18364188d 100644 --- a/src/block/ShulkerBox.php +++ b/src/block/ShulkerBox.php @@ -104,7 +104,7 @@ public function onInteract(Item $item, int $face, Vector3 $clickVector, ?Player return true; } - public function getCreativeDrops(): array{ + public function getCreativeDrops() : array{ $shulker = $this->position->getWorld()->getTile($this->position); if($shulker instanceof TileShulkerBox){ if(count($shulker->getInventory()->getContents()) > 0){ From 51005c258ee3844beca69426e120cd93253bf79e Mon Sep 17 00:00:00 2001 From: ShockedPlot7560 <66992287+ShockedPlot7560@users.noreply.github.com> Date: Wed, 15 Dec 2021 18:52:51 +0100 Subject: [PATCH 7/9] Fixed CS again --- src/block/ShulkerBox.php | 1 + 1 file changed, 1 insertion(+) diff --git a/src/block/ShulkerBox.php b/src/block/ShulkerBox.php index 7e18364188d..d84fa02df57 100644 --- a/src/block/ShulkerBox.php +++ b/src/block/ShulkerBox.php @@ -29,6 +29,7 @@ use pocketmine\math\Vector3; use pocketmine\player\Player; use pocketmine\world\BlockTransaction; +use function count; class ShulkerBox extends Opaque{ use AnyFacingTrait; From b02bcaf416fc1a83d11293ace120d1fd5fff072c Mon Sep 17 00:00:00 2001 From: ShockedPlot7560 <66992287+ShockedPlot7560@users.noreply.github.com> Date: Wed, 15 Dec 2021 18:57:20 +0100 Subject: [PATCH 8/9] fix mistake link to getCreativeXpDrop --- src/world/World.php | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/world/World.php b/src/world/World.php index bcce122bc26..81da6a6c5ad 100644 --- a/src/world/World.php +++ b/src/world/World.php @@ -1700,8 +1700,6 @@ public function useBreakOn(Vector3 $vector, Item &$item = null, ?Player $player $xpDrop = 0; if($player !== null and $player->hasFiniteResources()){ $xpDrop = array_sum(array_map(fn(Block $block) => $block->getXpDropForTool($item), $affectedBlocks)); - }elseif($player === null || $player->isCreative()){ - $xpDrop = array_sum(array_map(fn(Block $block) => $block->getCreativeXpDrop(), $affectedBlocks)); } if($player !== null){ From da2af3a13ff3f299b04edc4eff691f24b653a9b7 Mon Sep 17 00:00:00 2001 From: ShockedPlot7560 Date: Tue, 20 Aug 2024 09:12:47 +0000 Subject: [PATCH 9/9] fix reviews --- src/world/World.php | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/world/World.php b/src/world/World.php index a7f3d9315b6..adcfe63466e 100644 --- a/src/world/World.php +++ b/src/world/World.php @@ -2053,10 +2053,9 @@ public function useBreakOn(Vector3 $vector, Item &$item = null, ?Player $player $item = VanillaItems::AIR(); } - $drops = []; if($player === null || $player->hasFiniteResources()){ $drops = array_merge(...array_map(fn(Block $block) => $block->getDrops($item), $affectedBlocks)); - }elseif($player->isCreative()){ + }else{ $drops = array_merge(...array_map(fn(Block $block) => $block->getCreativeDrops(), $affectedBlocks)); }