From aa010b7dea5f1ffde3f8bae593d075999055d1a5 Mon Sep 17 00:00:00 2001 From: Shoghi Cervantes Date: Wed, 8 Oct 2014 16:58:17 +0200 Subject: [PATCH] Added ProjectileLaunchEvent --- src/pocketmine/Player.php | 15 ++++++- .../event/entity/ProjectileLaunchEvent.php | 45 +++++++++++++++++++ 2 files changed, 58 insertions(+), 2 deletions(-) create mode 100644 src/pocketmine/event/entity/ProjectileLaunchEvent.php diff --git a/src/pocketmine/Player.php b/src/pocketmine/Player.php index 4ee48bd11..6a5f317ff 100644 --- a/src/pocketmine/Player.php +++ b/src/pocketmine/Player.php @@ -28,11 +28,13 @@ use pocketmine\entity\DroppedItem; use pocketmine\entity\Entity; use pocketmine\entity\Human; use pocketmine\entity\Living; +use pocketmine\entity\Projectile; use pocketmine\event\block\SignChangeEvent; use pocketmine\event\entity\EntityDamageByEntityEvent; use pocketmine\event\entity\EntityDamageEvent; use pocketmine\event\entity\EntityRegainHealthEvent; use pocketmine\event\entity\EntityShootBowEvent; +use pocketmine\event\entity\ProjectileLaunchEvent; use pocketmine\event\inventory\InventoryCloseEvent; use pocketmine\event\inventory\InventoryPickupItemEvent; use pocketmine\event\player\PlayerAchievementAwardedEvent; @@ -1673,6 +1675,7 @@ class Player extends Human implements CommandSender, InventoryHolder, IPlayer{ if($ev->isCancelled()){ $ev->getProjectile()->kill(); }else{ + $ev->getProjectile()->setMotion($ev->getProjectile()->getMotion()->multiply($ev->getForce())); if($this->isSurvival()){ $this->inventory->removeItem(Item::get(Item::ARROW, 0, 1)); $bow->setDamage($bow->getDamage() + 1); @@ -1681,8 +1684,16 @@ class Player extends Human implements CommandSender, InventoryHolder, IPlayer{ $this->inventory->setItemInHand(Item::get(Item::AIR, 0, 0), $this); } } - $ev->getProjectile()->setMotion($ev->getProjectile()->getMotion()->multiply($ev->getForce())); - $ev->getProjectile()->spawnToAll(); + if($ev->getProjectile() instanceof Projectile){ + $this->server->getPluginManager()->callEvent($projectileEv = new ProjectileLaunchEvent($ev->getProjectile())); + if($projectileEv->isCancelled()){ + $ev->getProjectile()->kill(); + }else{ + $ev->getProjectile()->spawnToAll(); + } + }else{ + $ev->getProjectile()->spawnToAll(); + } } } //} diff --git a/src/pocketmine/event/entity/ProjectileLaunchEvent.php b/src/pocketmine/event/entity/ProjectileLaunchEvent.php new file mode 100644 index 000000000..d38a0a14f --- /dev/null +++ b/src/pocketmine/event/entity/ProjectileLaunchEvent.php @@ -0,0 +1,45 @@ +entity = $item; + + } + + /** + * @return Projectile + */ + public function getEntity(){ + return $this->entity; + } + +} \ No newline at end of file