mirror of
https://github.com/pmmp/PocketMine-MP.git
synced 2025-09-07 18:32:55 +00:00
Implemented block break XP drops
This commit is contained in:
@ -1676,10 +1676,16 @@ class Level implements ChunkManager, Metadatable{
|
||||
$item = ItemFactory::get(Item::AIR, 0, 0);
|
||||
}
|
||||
|
||||
$drops = ($player !== null and $player->isCreative()) ? [] : array_merge(...array_map(function(Block $block) use ($item) : array{ return $block->getDrops($item); }, $affectedBlocks));
|
||||
$drops = [];
|
||||
$xpDrop = 0;
|
||||
|
||||
if($player !== null and !$player->isCreative()){
|
||||
$drops = array_merge(...array_map(function(Block $block) use ($item) : array{ return $block->getDrops($item); }, $affectedBlocks));
|
||||
$xpDrop = array_sum(array_map(function(Block $block) use ($item) : int{ return $block->getXpDropForTool($item); }, $affectedBlocks));
|
||||
}
|
||||
|
||||
if($player !== null){
|
||||
$ev = new BlockBreakEvent($player, $target, $item, $player->isCreative(), $drops);
|
||||
$ev = new BlockBreakEvent($player, $target, $item, $player->isCreative(), $drops, $xpDrop);
|
||||
|
||||
if(($player->isSurvival() and !$target->isBreakable($item)) or $player->isSpectator()){
|
||||
$ev->setCancelled();
|
||||
@ -1711,6 +1717,7 @@ class Level implements ChunkManager, Metadatable{
|
||||
}
|
||||
|
||||
$drops = $ev->getDrops();
|
||||
$xpDrop = $ev->getXpDropAmount();
|
||||
|
||||
}elseif(!$target->isBreakable($item)){
|
||||
return false;
|
||||
@ -1731,6 +1738,10 @@ class Level implements ChunkManager, Metadatable{
|
||||
}
|
||||
}
|
||||
|
||||
if($xpDrop > 0){
|
||||
$this->dropExperience($target->add(0.5, 0.5, 0.5), $xpDrop);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user