1. The forums will be archived and moved to a read only mode in about 2 weeks (mid march).

Get last hit by player

Discussion in 'Development' started by rektpixel, Aug 25, 2017.

  1. rektpixel

    rektpixel Baby Zombie

    Messages:
    186
    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."1501);
            
    $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."1501);
                  
    $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.."11001);
                
    $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.."11001);
                        
    $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));
     
  2. PocketKiller

    PocketKiller Slime

    Messages:
    83
    GitHub:
    iPocket
    Can you recheck before posting a question?
    You tried to detect a player as an event on the 1st code...
    Challenge completed: Fixing code on a mobile phone
     
  3. Muqsit

    Muqsit Chicken

    Messages:
    1,548
    GitHub:
    muqsit
    Haven't you heard of the new and satisfying $entity->asVector3() function? :rolleyes:

    Back to your question. var_dump the damager.
     
    Eduardo and jasonwynn10 like this.
  4. SOFe

    SOFe Administrator Staff Member PMMP Team Poggit Admin

    Messages:
    1,968
    GitHub:
    sof3
    You don't need to clone it at all.
     
  5. RumDaDuMCPE

    RumDaDuMCPE Witch

    Messages:
    67
    GitHub:
    RumDaDuMCPE
    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."1501);

            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($damager5);

    }
     
  6. Eduardo

    Eduardo Baby Zombie

    Messages:
    100
    GitHub:
    xBeastMode
    The satisfaction you give is more than enough. ͡° ͜ʖ ͡
     
    RumDaDuMCPE and Muqsit like this.
  7. RumDaDuMCPE

    RumDaDuMCPE Witch

    Messages:
    67
    GitHub:
    RumDaDuMCPE
    *ded*
     
  1. This site uses cookies to help personalise content, tailor your experience and to keep you logged in if you register.
    By continuing to use this site, you are consenting to our use of cookies.