Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- protected function onHit(ProjectileHitEvent $event): void
- {
- $owner = $this->getOwningEntity();
- $hit = $event->getRayTraceResult()->getHitVector();
- $facing = $event->getRayTraceResult()->getHitFace();
- if (!is_null($owner)) {
- if ($owner instanceof LNPlayer) {
- $zombie = $this->generateTestingZombie(new Vector3($hit->x, $hit->y, $hit->z));
- if($facing === 2) $hit = $hit->subtract(0, 0, 0.2); //Fixes weird pearl thing that stops you from being able to pearl on walls
- if($facing === 4) $hit = $hit->subtract(0.2); //Fixes weird pearl thing that stops you from being able to pearl on walls
- if ($this->isInsideOfBlock($zombie) && $hit instanceof Block) { //Checks if zombie is inside block then cancelling if it is$owner->getLevel()));
- $zombie->flagForDespawn();
- $owner->sendMessage(C::RED . "You cannot pearl inside this block");
- $owner->getInventory()->addItem(Item::get(Item::ENDER_PEARL, 0, 1));
- $owner->setEndertime(0);
- return;
- }
- if ($this->getLevel()->getName() === $owner->getServer()->getDefaultLevel()->getName()) {
- if (Myriad::getFactionsManager()->isSpawnClaim($this->getPosition())) {
- $owner->sendPopup($owner->messageToTranslate('error_try_ender_pearl_spawn'));
- $owner->sendMessage($owner->messageToTranslate('error_try_ender_pearl_spawn'));
- $owner->getInventory()->addItem(Item::get(ItemIds::ENDER_PEARL, 0, 1));
- $owner->setEndertime(0);
- return;
- }
- }
- if (($owner->isInvincibility() || $owner->isPvp()) && Myriad::getFactionsManager()->isFactionClaim($this, $this->getLevel()->getName())) {
- $owner->sendPopup($owner->messageToTranslate('error_try_ender_pearl_to_claim'));
- $owner->sendMessage($owner->messageToTranslate('error_try_ender_pearl_to_claim'));
- $owner->getInventory()->addItem(Item::get(ItemIds::ENDER_PEARL, 0, 1));
- $owner->setEndertime(0);
- return;
- }
- $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
- 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
- $owner->sendMessage(TextFormat::RED . "You cannot pearl inside this block");
- $owner->getInventory()->addItem(Item::get(Item::ENDER_PEARL, 0, 1));
- $owner->setEndertime(0);
- return;
- }
- $this->level->broadcastLevelEvent($owner, LevelEventPacket::EVENT_PARTICLE_ENDERMAN_TELEPORT);
- $this->level->addSound(new EndermanTeleportSound($owner));
- $pos = $event->getRayTraceResult()->getHitVector();
- $owner->teleport($hit);
- $this->level->addSound(new EndermanTeleportSound($owner));
- $owner->attack(new EntityDamageEvent($owner, EntityDamageEvent::CAUSE_CONTACT, 0.5));
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement