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

KnockBack in one direction don't work

Discussion in 'Development' started by SkySeven, Feb 22, 2017.

  1. SkySeven

    SkySeven Baby Zombie

    Messages:
    145
    GitHub:
    SkySevenMC
    when i hit a player with a blaze rod, the player don't Knockback Where I look :/
    sorry for my English :/
    PHP:

     
    public function onDamage(EntityDamageEvent $event){
      if(
    $event->getEntity() instanceof Player){
       
    $player $event->getEntity()->getPlayer();
       
    $level $player->getLevel()->getName();
       if(
    $event Instanceof EntityDamageByEntityEvent){
        
    $item $event->getDamager()->getInventory()->getItemInHand()->getId();
     
        if(
    $item == 369){
         
    $event->setCancelled(false);
         
    $player->setHealth(20);
          
    $damager $event->getDamager()->getPlayer();
          
    $x $damager->getDirectionVector()->getX();
          
    $z $damager->getDirectionVector()->getZ();
         for(
    $i 0$i <= 750 $i++){
          
    $player->knockBack($player$x $z0.5);
         }
        }else{
         
    $event->setCancelled(true);
        }
       }
      }
     }
    help please !
    thank you in advance
     
    Last edited: Feb 22, 2017
  2. robske_110 (Tim)

    robske_110 (Tim) Wither Skeleton Poggit Reviewer

    Messages:
    1,342
    GitHub:
    robske110
    \pocketmine\Player->knockBack() does not exist
    why not just use:
    https://github.com/pmmp/PocketMine-...vent/entity/EntityDamageByEntityEvent.php#L75
    PHP:
    public function onDamage(EntityDamageEvent $event){
      if(
    $event->getEntity() instanceof Player){
       
    $player $event->getEntity()->getPlayer();
       
    $level $player->getLevel()->getName();
       if(
    $event Instanceof EntityDamageByEntityEvent){
        
    $item $event->getDamager()->getInventory()->getItemInHand()->getId();
        if(
    $item == Item::BLAZE_ROD){
         
    $player->setHealth(20);
         
    $event->setKnockBack(10);
        }else{
         
    $event->setCancelled(true);
        }
       }
      }
     }
     
  3. SkySeven

    SkySeven Baby Zombie

    Messages:
    145
    GitHub:
    SkySevenMC
    thx for your answer but setKnockBack is too strong, the player fly away...
     
  4. MyNET

    MyNET Silverfish

    Messages:
    24
    You can edit it!
    PHP:
    $event->setKnockBack(2); // Editable
     
  5. Thunder33345

    Thunder33345 Moderator Staff Member

    Messages:
    2,137
    GitHub:
    Thunder33345
    that's just offering an alternative instate of offering a solution
    it is like if X isnt working you distract yourself with using Y instated
    you can try using setmotion
     
    Muqsit and SkySeven like this.
  6. SkySeven

    SkySeven Baby Zombie

    Messages:
    145
    GitHub:
    SkySevenMC
    even setKnockBack(2) is too strong, the player flies high.
     
  7. robske_110 (Tim)

    robske_110 (Tim) Wither Skeleton Poggit Reviewer

    Messages:
    1,342
    GitHub:
    robske110
    then lower it. Seriously
    you can also use floating point values (e.g. 1.5)
     
    SkySeven likes this.
  8. SkySeven

    SkySeven Baby Zombie

    Messages:
    145
    GitHub:
    SkySevenMC
    i would like the player KnockBack at the same height, in a straight line.
     
  9. robske_110 (Tim)

    robske_110 (Tim) Wither Skeleton Poggit Reviewer

    Messages:
    1,342
    GitHub:
    robske110
    well, that's something different.
    For that you an use setMotion
    PHP:
    public function onDamage(EntityDamageEvent $event){
      if(
    $event->getEntity() instanceof Player){
       
    $player $event->getEntity()->getPlayer();
       
    $level $player->getLevel()->getName();
       if(
    $event Instanceof EntityDamageByEntityEvent){
        
    $item $event->getDamager()->getInventory()->getItemInHand()->getId();
        if(
    $item == Item::BLAZE_ROD){
          
    $player->setHealth(20);
          
    $damager $event->getDamager()->getPlayer();
          
    $dirVec $damager->getDirectionVector()->getX();
           
    $damager->setMotion(new Vector3($dirVec->getX(), 0.1$dirVec->getZ());
        }else{
         
    $event->setCancelled(true);
        }
       }
      }
     }
     
    SkySeven likes this.
  10. SkySeven

    SkySeven Baby Zombie

    Messages:
    145
    GitHub:
    SkySevenMC
    thank you !:p
     
  11. Muqsit

    Muqsit Chicken

    Messages:
    1,548
    GitHub:
    muqsit
    Whenever you're checking whether an item's ID or item's damage is so and so, use the identity operator. Equality operator is useless as ID and damage always return int, not an integer in a string.
    PHP:
    if($item === Item::BLAZE_ROD)
     
  12. Remarkabless

    Remarkabless Slime

    Messages:
    83
    GitHub:
    Remakem
    i didnt want to create a new thread so. I have a working plugin like this. But when I hit the player the actual knockback of the player doesnt work. It works in a way where it moves the player only a certain direction even though you hit from anyside. Any help? I saw the function
    Public function knockback in Living.php but idk how that works pla help
     
  13. robske_110 (Tim)

    robske_110 (Tim) Wither Skeleton Poggit Reviewer

    Messages:
    1,342
    GitHub:
    robske110
    well, you can try to use setKnockBack, as quoted above
     
  14. Remarkabless

    Remarkabless Slime

    Messages:
    83
    GitHub:
    Remakem
    I have a wroking plugin using setKnockback but the reason is I want to change the amount of height they get off the ground when they get hit but keep the default knockback goind sideways and backwards
     
  15. robske_110 (Tim)

    robske_110 (Tim) Wither Skeleton Poggit Reviewer

    Messages:
    1,342
    GitHub:
    robske110
    that should work with this, because it uses the DirectionVector of the attack. Just modify 0.1 for the height.
     
  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.