hey I'm making this death function plugin, when a player falls into the void you get teleported to spawn and get given a death title, that all works fine which I have got but I want to be able to get the last person to hit the player who fell into the void or knocked into the void is reward with 5 coins. I did this but it doesn't work. PHP: public function checkVoid(PlayerMoveEvent $event){ $player = $event->getPlayer(); $x = $this->getServer()->getDefaultLevel()->getSafeSpawn()->getFloorX(); $y = $this->getServer()->getDefaultLevel()->getSafeSpawn()->getFloorY(); $z = $this->getServer()->getDefaultLevel()->getSafeSpawn()->getFloorZ(); $level = $this->getServer()->getDefaultLevel(); if($event->getTo()->getFloorY() < 0){ $player->addTitle("§c§lYOU DIED!!§r", "§fRespawned.", 1, 50, 1); $player->setHealth(20); $player->teleport(new Position($x, $y, $z, $level)); $player->setGamemode(Player::SURVIVAL); } else { if ($player instanceof \pocketmine\event\entity\EntityDamageByEntityEvent) { $player->addTitle("§c§lYOU DIED!!§r", "§fRespawned.", 1, 50, 1); $cause = $player->getLastDamageCause(); $cause = $entity->getLastDamageCause(); $damager = $cause->getDamager(); $damager->sendMessage("§aYou killed§r " . $entity->getNameTag() ."§6 (+ 5 coins)"); $damager->setHealth(20); $player->setHealth(20); $player->teleport(new Position($x, $y, $z, $level)); $player->setGamemode(Player::SURVIVAL); $money = $this->getServer()->getPluginManager()->getPlugin("EconomyAPI")->addMoney($damager->getName(), 5); return; } } }} This just teleported the player who fell into the void to spawn and gave the title message. It didn't reward the player who knocked the player into the void. please help, thanks :3 also this is what I did to get the player who shot a player and that worked but I don't think the ones after CAUSE_PROJECTILE worked such as lighting a player on fire.. PHP: public function onEntityDamage(EntityDamageEvent $ev) { if($ev->isCancelled()) { return; } $entity = $ev->getEntity(); if($entity instanceof Player and $entity->getHealth() - $ev->getDamage() <= 0) { if($entity->getGamemode() === Player::SPECTATOR){ return; } if ($ev instanceof \pocketmine\event\entity\EntityDamageByEntityEvent) { $ev->setCancelled(true); $entity->setGamemode(Player::SPECTATOR); $this->getServer()->getScheduler()->scheduleDelayedTask(new SpectateTask($this, $entity), $this->config["time"] * 20); $killer = $ev->getDamager(); $entity->addTitle("§c§lYOU DIED!!§r", "§fRespawning..", 1, 100, 1); $level = $entity->getLevel(); $x = $entity->getX(); $y = $entity->getY(); $z = $entity->getZ(); $pos1 = new Vector3($x, $y, $z); $pos = new Vector3($x, $y + 2, $z); $level->addSound(new GhastSound($pos1)); $level->addParticle(new HeartParticle($pos)); $killer->sendMessage("§aYou killed§r " . $entity->getNameTag() ."§6 (+ 5 coins)"); $killer->setHealth(20); $money = $this->getServer()->getPluginManager()->getPlugin("EconomyAPI")->addMoney($killer->getName(), 5); } if($entity instanceof Player and $entity->getHealth() - $ev->getDamage() <= 0) { $ev->setCancelled(true); $player = $ev->getEntity(); $cause = $player->getLastDamageCause(); if($cause instanceof EntityDamageByEntityEvent && $ev->getCause() === EntityDamageEvent::CAUSE_PROJECTILE . CAUSE_CONTACT . CAUSE_FIRE . CAUSE_FALL . CAUSE_FIRE_TICK . CAUSE_DROWNING . CAUSE_MAGIC . CAUSE_STARVATION . CAUSE_LAVA . CAUSE_SUFFICATION . CAUSE_BLOCK_EXPLOSION . CAUSE_ENTITY_EXPLOSION){ $cause = $entity->getLastDamageCause(); $damager = $cause->getDamager(); } else { $entity->setGamemode(Player::SPECTATOR); $this->getServer()->getScheduler()->scheduleDelayedTask(new SpectateTask($this, $entity), $this->config["time"] * 20); $entity->addTitle("§c§lYOU DIED!!§r", "§fRespawning..", 1, 100, 1); $level = $entity->getLevel(); $x = $entity->getX(); $y = $entity->getY(); $z = $entity->getZ(); $pos1 = new Vector3($x, $y, $z); $pos = new Vector3($x, $y + 2, $z); $level->addSound(new GhastSound($pos1)); $level->addParticle(new HeartParticle($pos));
Can you recheck before posting a question? You tried to detect a player as an event on the 1st code... Spoiler Challenge completed: Fixing code on a mobile phone
Haven't you heard of the new and satisfying $entity->asVector3() function? Back to your question. var_dump the damager.
This might fix it :# PHP: public function checkVoid(\pocketmine\event\entity\EntityDamageEvent $event){ $player = $event->getPlayer(); $spawn = $this->getServer()->getDefaultLevel()->getSafeSpawn(); $x = $spawn->getFloorX(); $y = $spawn->getFloorY(); $z = $spawn->getFloorZ(); $level = $this->getServer()->getDefaultLevel(); if($event->getCause() === $event::CAUSE_VOID){ // This'd be rather accurate for void death. $player->addTitle("§c§lYOU DIED!!§r", "§fRespawned.", 1, 50, 1); if ($player->isOnFire()) $player->extinguish(); // Since the guy 'died' xP $player->setFood($player->getMaxFood()); $player->setHealth($player->getMaxHealth()); $player->teleport(new Position($x, $y, $z, $level)); $player->setGamemode(Player::SURVIVAL); } } } public function onDeath(\pocketmine\event\entity\EntityDeathEvent $event) { /** You may cancel the event and do a title if you'd like to. I'm not going to cancel the event. *$player->addTitle("§c§lYOU DIED!!§r", "§fRespawned.", 1, 50, 1); */ $cause = ($entity = $event->getEntity())->getLastDamageCause(); if ($cause instanceof \pocketmine\event\entity\EntityDamageByEntityEvent) continue; $damager = $cause->getDamager(); $player = $entity; $damager->sendMessage("§aYou killed§r " . $entity->getNameTag() ."§6 (+ 5 coins)"); $damager->setHealth(20); $player->setHealth(20); $player->teleport(new Position($x, $y, $z, $level)); $player->setGamemode(Player::SURVIVAL); $money = $this->getServer()->getPluginManager()->getPlugin("EconomyAPI")->addMoney($damager, 5);}