diff --git a/src/pocketmine/block/Cactus.php b/src/pocketmine/block/Cactus.php index d551767cc..610f0ab0e 100644 --- a/src/pocketmine/block/Cactus.php +++ b/src/pocketmine/block/Cactus.php @@ -21,6 +21,7 @@ namespace pocketmine\block; +use pocketmine\event\entity\EntityDamageByBlockEvent; use pocketmine\item\Item; use pocketmine\level\Level; use pocketmine\math\AxisAlignedBB; @@ -49,7 +50,7 @@ class Cactus extends Transparent{ } public function onEntityCollide(Entity $entity){ - $ev = new EntityDamageEvent($entity, EntityDamageEvent::CAUSE_CONTACT, 1); + $ev = new EntityDamageByBlockEvent($this, $entity, EntityDamageEvent::CAUSE_CONTACT, 1); Server::getInstance()->getPluginManager()->callEvent($ev); if(!$ev->isCancelled()){ $entity->attack($ev->getFinalDamage(), $ev); diff --git a/src/pocketmine/block/Fire.php b/src/pocketmine/block/Fire.php index 7f59cd9e5..fcd541c21 100644 --- a/src/pocketmine/block/Fire.php +++ b/src/pocketmine/block/Fire.php @@ -22,6 +22,7 @@ namespace pocketmine\block; use pocketmine\event\entity\EntityCombustByBlockEvent; +use pocketmine\event\entity\EntityDamageByBlockEvent; use pocketmine\item\Item; use pocketmine\entity\Entity; use pocketmine\level\Level; @@ -42,7 +43,7 @@ class Fire extends Flowable{ } public function onEntityCollide(Entity $entity){ - $ev = new EntityDamageEvent($entity, EntityDamageEvent::CAUSE_FIRE, 1); + $ev = new EntityDamageByBlockEvent($this, $entity, EntityDamageEvent::CAUSE_FIRE, 1); Server::getInstance()->getPluginManager()->callEvent($ev); if(!$ev->isCancelled()){ $entity->attack($ev->getFinalDamage(), $ev); diff --git a/src/pocketmine/block/Lava.php b/src/pocketmine/block/Lava.php index aea08c585..fb517991a 100644 --- a/src/pocketmine/block/Lava.php +++ b/src/pocketmine/block/Lava.php @@ -22,6 +22,7 @@ namespace pocketmine\block; use pocketmine\event\entity\EntityCombustByBlockEvent; +use pocketmine\event\entity\EntityDamageByBlockEvent; use pocketmine\item\Item; use pocketmine\entity\Entity; use pocketmine\level\Level; @@ -42,7 +43,7 @@ class Lava extends Liquid{ public function onEntityCollide(Entity $entity){ $entity->fallDistance *= 0.5; - $ev = new EntityDamageEvent($entity, EntityDamageEvent::CAUSE_LAVA, 4); + $ev = new EntityDamageByBlockEvent($this, $entity, EntityDamageEvent::CAUSE_LAVA, 4); Server::getInstance()->getPluginManager()->callEvent($ev); if(!$ev->isCancelled()){ $entity->attack($ev->getFinalDamage(), $ev); diff --git a/src/pocketmine/entity/Arrow.php b/src/pocketmine/entity/Arrow.php index 78f1cd349..0bba31b97 100644 --- a/src/pocketmine/entity/Arrow.php +++ b/src/pocketmine/entity/Arrow.php @@ -127,15 +127,17 @@ class Arrow extends Projectile{ if(!$ev->isCancelled()){ $movingObjectPosition->entityHit->attack($ev->getFinalDamage(), $ev); - if($this->fireTicks > 0){ - $ev = new EntityCombustByEntityEvent($this, $movingObjectPosition->entityHit, 5); - $this->server->getPluginManager()->callEvent($ev); - if(!$ev->isCancelled()){ - $movingObjectPosition->entityHit->setOnFire($ev->getDuration()); - } - } - $this->kill(); } + + if($this->fireTicks > 0){ + $ev = new EntityCombustByEntityEvent($this, $movingObjectPosition->entityHit, 5); + $this->server->getPluginManager()->callEvent($ev); + if(!$ev->isCancelled()){ + $movingObjectPosition->entityHit->setOnFire($ev->getDuration()); + } + } + + $this->kill(); } } diff --git a/src/pocketmine/event/entity/EntityDamageByBlockEvent.php b/src/pocketmine/event/entity/EntityDamageByBlockEvent.php new file mode 100644 index 000000000..0a92cc578 --- /dev/null +++ b/src/pocketmine/event/entity/EntityDamageByBlockEvent.php @@ -0,0 +1,52 @@ +damager = $damager; + parent::__construct($entity, $cause, $damage); + } + + /** + * @return Block + */ + public function getDamager(){ + return $this->damager; + } + + +} \ No newline at end of file diff --git a/src/pocketmine/level/Explosion.php b/src/pocketmine/level/Explosion.php index 8f5bd24f7..ce9c9f7fa 100644 --- a/src/pocketmine/level/Explosion.php +++ b/src/pocketmine/level/Explosion.php @@ -25,6 +25,8 @@ use pocketmine\block\Block; use pocketmine\block\TNT; use pocketmine\entity\Entity; use pocketmine\entity\PrimedTNT; +use pocketmine\event\entity\EntityDamageByBlockEvent; +use pocketmine\event\entity\EntityDamageByEntityEvent; use pocketmine\event\entity\EntityDamageEvent; use pocketmine\event\entity\EntityExplodeEvent; use pocketmine\item\Item; @@ -141,7 +143,15 @@ class Explosion{ $damage = (int) ((($impact * $impact + $impact) / 2) * 8 * $explosionSize + 1); - $this->level->getServer()->getPluginManager()->callEvent($ev = new EntityDamageEvent($entity, $this->what instanceof Entity ? EntityDamageEvent::CAUSE_ENTITY_EXPLOSION : EntityDamageEvent::CAUSE_BLOCK_EXPLOSION, $damage)); + if($this->what instanceof Entity){ + $ev = new EntityDamageByEntityEvent($this->what, $entity, EntityDamageEvent::CAUSE_ENTITY_EXPLOSION, $damage); + }elseif($this->what instanceof Block){ + $ev = new EntityDamageByBlockEvent($this->what, $entity, EntityDamageEvent::CAUSE_BLOCK_EXPLOSION, $damage); + }else{ + $ev = new EntityDamageEvent($entity, EntityDamageEvent::CAUSE_BLOCK_EXPLOSION, $damage); + } + + $this->level->getServer()->getPluginManager()->callEvent($ev); if(!$ev->isCancelled()){ $entity->attack($ev->getFinalDamage(), $ev);