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 , $z, 0.5); } }else{ $event->setCancelled(true); } } } } help please ! thank you in advance
\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); } } } }
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
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); } } } }
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)
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
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
that should work with this, because it uses the DirectionVector of the attack. Just modify 0.1 for the height.