Call BlockBreakEvent when destroying ItemFrame. Close #827

This commit is contained in:
PeratX 2016-04-18 11:49:11 +08:00
commit fc35b6d6b3

View file

@ -39,6 +39,7 @@ use pocketmine\entity\Minecart;
use pocketmine\entity\Projectile;
use pocketmine\entity\ThrownExpBottle;
use pocketmine\entity\ThrownPotion;
use pocketmine\event\block\BlockBreakEvent;
use pocketmine\event\block\ItemFrameDropItemEvent;
use pocketmine\event\block\SignChangeEvent;
use pocketmine\event\entity\EntityDamageByBlockEvent;
@ -2468,16 +2469,20 @@ class Player extends Human implements CommandSender, InventoryHolder, ChunkLoade
case ProtocolInfo::ITEM_FRAME_DROP_ITEM_PACKET:
$tile = $this->level->getTile($this->temporalVector->setComponents($packet->x, $packet->y, $packet->z));
if($tile instanceof ItemFrame){
$item = $tile->getItem();
$this->server->getPluginManager()->callEvent($ev = new ItemFrameDropItemEvent($this->level->getBlock($tile), $tile, $item));
$block = $this->level->getBlock($tile);
$this->server->getPluginManager()->callEvent($ev = new BlockBreakEvent($this, $block, $this->getInventory()->getItemInHand(), true));
if(!$ev->isCancelled()){
if($item->getId() !== Item::AIR){
if((mt_rand(0, 10) / 10) < $tile->getItemDropChance()){
$this->level->dropItem($tile, $item);
$item = $tile->getItem();
$this->server->getPluginManager()->callEvent($ev = new ItemFrameDropItemEvent($block, $tile, $item));
if(!$ev->isCancelled()){
if($item->getId() !== Item::AIR){
if((mt_rand(0, 10) / 10) < $tile->getItemDropChance()){
$this->level->dropItem($tile, $item);
}
$tile->setItem(Item::get(Item::AIR));
$tile->setItemRotation(0);
}
$tile->setItem(Item::get(Item::AIR));
$tile->setItemRotation(0);
}
}else $tile->spawnTo($this);
}else $tile->spawnTo($this);
}
break;