Advertisement
Guest User

Untitled

a guest
Dec 15th, 2019
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.90 KB | None | 0 0
  1. class BetterEnderPearl extends EPearl
  2. {
  3. public $width = 0.25;//0.25
  4. public $height = 0.25;//0.25
  5. public $level;
  6.  
  7.  
  8. /**
  9. * BetterEnderPearl constructor.
  10. * @param Level $level
  11. * @param CompoundTag $nbt
  12. * @param Entity|null $shootingEntity
  13. */
  14. public function __construct(Level $level, CompoundTag $nbt, Entity $shootingEntity = null)
  15. {
  16. parent::__construct($level, $nbt, $shootingEntity);
  17. $this->level = $level;
  18. }
  19.  
  20.  
  21. private function generateTestingZombie(Vector3 $pos): Entity
  22. {
  23. $nbt = Entity::createBaseNBT($pos);
  24. $zombie = new Zombie($this->level, $nbt);
  25. return $zombie;
  26. }
  27.  
  28. private function isInsideOfBlock(Entity $entity)
  29. {
  30. $block = $entity->level->getBlockAt((int)floor($entity->x), (int)floor($y = ($entity->y + $entity->getEyeHeight())), (int)floor($entity->z));
  31.  
  32. return $block->isSolid() and $block->collidesWithBB($entity->getBoundingBox());
  33. }
  34.  
  35.  
  36. protected function onHit(ProjectileHitEvent $event) : void
  37. {
  38. $result = $event->getRayTraceResult();
  39. $owner = $this->getOwningEntity();
  40. $facing = $result->getHitFace();
  41. $hit = $result->getHitVector();
  42. if ($event instanceof ProjectileHitBlockEvent) {
  43. $pos = $event->getBlockHit();
  44. } elseif ($event instanceof ProjectileHitEntityEventct) {
  45. $pos = $event->getEntityHit();
  46. } else $hit = null;
  47. if (!$owner instanceof LNPlayer || $hit === null) {
  48. return;
  49. }
  50. $distance = sqrt((($owner->x - $hit->x) ** 2) + ((($owner->y + 1) - $hit->y) ** 2) + (($owner->z - $hit->z) ** 2));
  51. if (!$hit instanceof Air and $distance < 2.25 and $facing !== 1) {
  52. $owner->sendMessage(TextFormat::RED . "You cannot pearl inside this block");
  53. $owner->getInventory()->addItem(Item::get(Item::ENDER_PEARL, 0, 1));
  54. $owner->setEndertime(0);
  55. return;
  56. }
  57. $zombie = $this->generateTestingZombie($pos);
  58. if($facing === 2) $pos = $pos->subtract(0, 0, 0.2);
  59. if($facing === 4) $pos = $pos->subtract(0.2);
  60. if($this->isInsideOfBlock($zombie) && $hit instanceof Block){
  61. $zombie->flagForDespawn();
  62. $owner->sendMessage(TextFormat::RED . "You cannot pearl inside this block");
  63. $owner->getInventory()->addItem(Item::get(Item::ENDER_PEARL, 0, 1));
  64. $owner->setEndertime(0);
  65. return;
  66. }
  67. $zombie->flagForDespawn();
  68. $this->level->broadcastLevelEvent($owner, LevelEventPacket::EVENT_PARTICLE_ENDERMAN_TELEPORT);
  69. $this->level->addSound(new EndermanTeleportSound($owner));
  70. $owner->teleport($pos);
  71. $this->level->addSound(new EndermanTeleportSound($owner));
  72. $owner->attack(new EntityDamageEvent($owner, EntityDamageEvent::CAUSE_FALL, 2));
  73. }
  74.  
  75. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement