Advertisement
Guest User

Untitled

a guest
Dec 15th, 2019
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.49 KB | None | 0 0
  1. protected function onHit(ProjectileHitEvent $event): void
  2. {
  3. $owner = $this->getOwningEntity();
  4. $hit = $event->getRayTraceResult()->getHitVector();
  5. $facing = $event->getRayTraceResult()->getHitFace();
  6.  
  7. if (!is_null($owner)) {
  8.  
  9. if ($owner instanceof LNPlayer) {
  10.  
  11. $zombie = $this->generateTestingZombie(new Vector3($hit->x, $hit->y, $hit->z));
  12.  
  13. if($facing === 2) $hit = $hit->subtract(0, 0, 0.2); //Fixes weird pearl thing that stops you from being able to pearl on walls
  14. if($facing === 4) $hit = $hit->subtract(0.2); //Fixes weird pearl thing that stops you from being able to pearl on walls
  15.  
  16. if ($this->isInsideOfBlock($zombie) && $hit instanceof Block) { //Checks if zombie is inside block then cancelling if it is$owner->getLevel()));
  17. $zombie->flagForDespawn();
  18. $owner->sendMessage(C::RED . "You cannot pearl inside this block");
  19. $owner->getInventory()->addItem(Item::get(Item::ENDER_PEARL, 0, 1));
  20. $owner->setEndertime(0);
  21. return;
  22. }
  23.  
  24.  
  25. if ($this->getLevel()->getName() === $owner->getServer()->getDefaultLevel()->getName()) {
  26. if (Myriad::getFactionsManager()->isSpawnClaim($this->getPosition())) {
  27. $owner->sendPopup($owner->messageToTranslate('error_try_ender_pearl_spawn'));
  28. $owner->sendMessage($owner->messageToTranslate('error_try_ender_pearl_spawn'));
  29. $owner->getInventory()->addItem(Item::get(ItemIds::ENDER_PEARL, 0, 1));
  30. $owner->setEndertime(0);
  31. return;
  32. }
  33. }
  34.  
  35. if (($owner->isInvincibility() || $owner->isPvp()) && Myriad::getFactionsManager()->isFactionClaim($this, $this->getLevel()->getName())) {
  36. $owner->sendPopup($owner->messageToTranslate('error_try_ender_pearl_to_claim'));
  37. $owner->sendMessage($owner->messageToTranslate('error_try_ender_pearl_to_claim'));
  38. $owner->getInventory()->addItem(Item::get(ItemIds::ENDER_PEARL, 0, 1));
  39. $owner->setEndertime(0);
  40. return;
  41. }
  42.  
  43.  
  44. $distance = sqrt((($owner->x - $hit->x) ** 2) + ((($owner->y + 1) - $hit->y) ** 2) + (($owner->z - $hit->z) ** 2)); //Gets the distance between the block/entity hit and player from head height of player
  45. if (!$hit instanceof Air and $distance < 2.25 and $facing !== 1) {//Checks if the pearl landed is to close to the player then cancelling if it is
  46. $owner->sendMessage(TextFormat::RED . "You cannot pearl inside this block");
  47. $owner->getInventory()->addItem(Item::get(Item::ENDER_PEARL, 0, 1));
  48. $owner->setEndertime(0);
  49. return;
  50. }
  51.  
  52.  
  53. $this->level->broadcastLevelEvent($owner, LevelEventPacket::EVENT_PARTICLE_ENDERMAN_TELEPORT);
  54. $this->level->addSound(new EndermanTeleportSound($owner));
  55. $pos = $event->getRayTraceResult()->getHitVector();
  56. $owner->teleport($hit);
  57.  
  58. $this->level->addSound(new EndermanTeleportSound($owner));
  59. $owner->attack(new EntityDamageEvent($owner, EntityDamageEvent::CAUSE_CONTACT, 0.5));
  60. }
  61. }
  62. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement