Example #1
0
 public function onEntityDamage(EntityDamageEvent $event)
 {
     if (!$event->isCancelled() && $event instanceof EntityDamageByEntityEvent) {
         $e = $event->getEntity();
         $arrow = $event->getDamager();
         $damage = round($event->getDamage() / 2);
         if ($arrow instanceof AbilityArrow) {
             $shoter = $arrow->shootingEntity;
             if ($shoter instanceof Player) {
                 if ($arrow instanceof FireArrow) {
                     $e->setOnFire(rand(3, 10));
                 } elseif ($arrow instanceof TeleportArrow) {
                     $shoter->teleport($e);
                 } elseif ($arrow instanceof SpiderArrow) {
                     $e->getLevel()->setBlock($e, Block::get(30));
                 } elseif ($arrow instanceof HealArrow) {
                     $damage = -$damage;
                 } elseif ($arrow instanceof PowerArrow) {
                     $damage = round($damage * rand(2, 3) / 2);
                 } else {
                     return;
                 }
                 $arrow->kill();
             }
         }
         $event->setDamage($damage);
     }
 }
Example #2
0
 public function onPvP(EntityDamageEvent $ev)
 {
     if ($ev->isCancelled()) {
         return;
     }
     if (!$ev instanceof EntityDamageByEntityEvent) {
         return;
     }
     if (!(($pl = $ev->getEntity()) instanceof Player && $ev->getDamager() instanceof Player)) {
         return;
     }
     $world = $pl->getLevel()->getName();
     if (!isset($this->wcfg[$world])) {
         return;
     }
     if ($this->wcfg[$world] !== false) {
         $sp = $pl->getLevel()->getSpawnLocation();
         $dist = $sp->distance($pl);
         if ($dist > $this->owner->getServer()->getSpawnRadius()) {
             return;
         }
     }
     $this->owner->msg($ev->getDamager(), mc::_("You are not allowed to do that here"));
     $ev->setCancelled();
 }
Example #3
0
 /**
  * @param CommandSender $sender
  * @param string $alias
  * @param array $args
  * @return bool
  */
 public function execute(CommandSender $sender, $alias, array $args)
 {
     if (!$this->testPermission($sender)) {
         return false;
     }
     if (count($args) !== 1) {
         $sender->sendMessage($sender instanceof Player ? $this->getUsage() : $this->getConsoleUsage());
         return false;
     }
     $player = $this->getPlugin()->getPlayer($args[0]);
     if (!$player instanceof Player) {
         $sender->sendMessage(TextFormat::RED . "[Error] Player not found");
         return false;
     }
     if ($this->getPlugin()->isGod($player)) {
         $sender->sendMessage(TextFormat::RED . "You can't kill " . $args[0]);
         return false;
     }
     $sender->getServer()->getPluginManager()->callEvent($ev = new EntityDamageEvent($player, EntityDamageEvent::CAUSE_SUICIDE, $player->getHealth()));
     if ($ev->isCancelled()) {
         return true;
     }
     $player->setLastDamageCause($ev);
     $player->setHealth(0);
     $player->sendMessage("Ouch. That look like it hurt.");
     return true;
 }
Example #4
0
 /**
  * @param CommandSender $sender
  * @param string $alias
  * @param array $args
  * @return bool
  */
 public function execute(CommandSender $sender, $alias, array $args)
 {
     if (!$this->testPermission($sender)) {
         return false;
     }
     if (!$sender instanceof Player && count($args) !== 1) {
         $this->sendUsage($sender, $alias);
         return false;
     }
     $player = $sender;
     if (isset($args[0])) {
         if (!$sender->hasPermission("essentials.kill.other")) {
             $sender->sendMessage(TextFormat::RED . $this->getPermissionMessage());
             return false;
         }
         if (!($player = $this->getAPI()->getPlayer($args[0])) instanceof Player) {
             $sender->sendMessage(TextFormat::RED . "[Error] Player not found");
             return false;
         }
     }
     if ($this->getAPI()->isGod($player)) {
         $sender->sendMessage(TextFormat::RED . $args[0] . " can't be killed!");
         return false;
     }
     $sender->getServer()->getPluginManager()->callEvent($ev = new EntityDamageEvent($player, EntityDamageEvent::CAUSE_SUICIDE, $player->getHealth()));
     if ($ev->isCancelled()) {
         return true;
     }
     $player->setLastDamageCause($ev);
     $player->setHealth(0);
     $player->sendMessage("Ouch. That look like it hurt.");
     return true;
 }
 public function onDamage(EntityDamageEvent $event)
 {
     $victim = $event->getEntity();
     if ($victim instanceof Player) {
         if (!$event->isCancelled()) {
             if ($this->plugin->getFlyingSession($victim)->getFlying()) {
                 $this->plugin->getFlyingSession($victim)->setFlying(false);
                 $victim->sendMessage(TF::GOLD . "You are no longer in fly mode!");
             }
         }
     }
 }
Example #6
0
 /**
  * @priority MONITOR
  */
 public function onDamage(EntityDamageEvent $ev)
 {
     if ($ev->isCancelled()) {
         return;
     }
     $damage = $ev->getDamage();
     $player = $ev->getEntity();
     if (!$player instanceof Player) {
         return;
     }
     for ($i = 0; $i < $damage; $i++) {
         $player->getLevel()->addParticle(new RedstoneParticle(self::randVector($player), mt_rand() / mt_getrandmax() * 2));
     }
 }
Example #7
0
 public function onFall(EntityDamageEvent $ev)
 {
     if ($ev->isCancelled()) {
         return;
     }
     $cause = $ev->getCause();
     if ($cause !== EntityDamageEvent::CAUSE_FALL) {
         return;
     }
     $et = $ev->getEntity();
     $id = $et->getLevel()->getBlockIdAt($et->getX(), $et->getY() - 1, $et->getZ());
     if (isset($this->blocks[$id])) {
         // Soft landing!
         $ev->setCancelled();
     }
 }
 public function onDamage(EntityDamageEvent $ev)
 {
     if ($ev->isCancelled()) {
         return;
     }
     if (!$ev instanceof EntityDamageByEntityEvent) {
         return;
     }
     if (!$ev->getEntity() instanceof Player) {
         return;
     }
     if (!$this->getState("shield", $ev->getEntity(), false)) {
         return;
     }
     $ev->setCancelled();
 }
Example #9
0
 public function execute(CommandSender $sender, $currentAlias, array $args)
 {
     if (!$this->testPermission($sender)) {
         return true;
     }
     if (count($args) >= 2) {
         $sender->sendMessage(new TranslationContainer("commands.generic.usage", [$this->usageMessage]));
         return false;
     }
     if (count($args) === 1) {
         if (!$sender->hasPermission("pocketmine.kill.other")) {
             $sender->sendMessage(new TranslationContainer(TextFormat::RED . "%commands.generic.permission"));
             return true;
         }
         $player = $sender->getServer()->getPlayer($args[0]);
         if ($player instanceof Player) {
             $sender->getServer()->getPluginManager()->callEvent($ev = new EntityDamageEvent($player, EntityDamageEvent::CAUSE_SUICIDE, 1000));
             if ($ev->isCancelled()) {
                 return true;
             }
             $player->setLastDamageCause($ev);
             $player->setHealth(0);
             Command::broadcastCommandMessage($sender, new TranslationContainer("commands.kill.successful", [$player->getName()]));
         } else {
             $sender->sendMessage(new TranslationContainer(TextFormat::RED . "%commands.generic.player.notFound"));
         }
         return true;
     }
     if ($sender instanceof Player) {
         if (!$sender->hasPermission("pocketmine.kill.self")) {
             $sender->sendMessage(new TranslationContainer(TextFormat::RED . "%commands.generic.permission"));
             return true;
         }
         $sender->getServer()->getPluginManager()->callEvent($ev = new EntityDamageEvent($sender, EntityDamageEvent::CAUSE_SUICIDE, 1000));
         if ($ev->isCancelled()) {
             return true;
         }
         $sender->setLastDamageCause($ev);
         $sender->setHealth(0);
         $sender->sendMessage(new TranslationContainer("commands.kill.successful", [$sender->getName()]));
     } else {
         $sender->sendMessage(new TranslationContainer("commands.generic.usage", [$this->usageMessage]));
         return false;
     }
     return true;
 }
Example #10
0
 /**
  * @param CommandSender $sender
  * @param string $alias
  * @param array $args
  * @return bool
  */
 public function execute(CommandSender $sender, $alias, array $args)
 {
     if (!$this->testPermission($sender)) {
         return false;
     }
     if (!$sender instanceof Player || count($args) !== 0) {
         $this->sendUsage($sender, $alias);
         return false;
     }
     $sender->getServer()->getPluginManager()->callEvent($ev = new EntityDamageEvent($sender, EntityDamageEvent::CAUSE_SUICIDE, $sender->getHealth()));
     if ($ev->isCancelled()) {
         return true;
     }
     $sender->setLastDamageCause($ev);
     $sender->setHealth(0);
     $sender->sendMessage("Ouch. That look like it hurt.");
     return true;
 }
Example #11
0
 public function execute(CommandSender $sender, $currentAlias, array $args)
 {
     if (!$this->testPermission($sender)) {
         return \true;
     }
     if ($sender instanceof Player) {
         $sender->getServer()->getPluginManager()->callEvent($ev = new EntityDamageEvent($sender, EntityDamageEvent::CAUSE_SUICIDE, 1000));
         if ($ev->isCancelled()) {
             return \true;
         }
         $sender->setLastDamageCause($ev);
         $sender->setHealth(0);
         $sender->sendMessage("Ouch. That look like it hurt.");
     } else {
         $sender->sendMessage(TextFormat::RED . "You can only perform this command as a player");
     }
     return \true;
 }
Example #12
0
 public function onPvP(EntityDamageEvent $ev)
 {
     if ($ev->isCancelled()) {
         return;
     }
     if (!$ev instanceof EntityDamageByEntityEvent) {
         return;
     }
     $et = $ev->getEntity();
     if (!$et instanceof Player) {
         return;
     }
     $sp = $et->getLevel()->getSpawnLocation();
     $dist = $sp->distance($et);
     if ($dist > $this->owner->getServer()->getSpawnRadius()) {
         return;
     }
     $ev->setCancelled();
 }
 /**
  * @priority HIGH
  */
 public function onAttack(EntityDamageEvent $ev)
 {
     if ($ev->isCancelled()) {
         return;
     }
     if (!$ev instanceof EntityDamageByEntityEvent) {
         return;
     }
     $pl = $ev->getDamager();
     if (!$pl instanceof Player) {
         return;
     }
     $n = $pl->getName();
     if (!isset($this->players[$n])) {
         return;
     }
     // Burn baby burn!!!
     $ev->getEntity()->setOnFire($this->cf["effect"]);
 }
Example #14
0
 public function onDamage(EntityDamageEvent $ev)
 {
     if ($ev->isCancelled()) {
         return;
     }
     if ($ev->getEntity() instanceof Player) {
         if (isset($this->watchers[strtolower($ev->getEntity()->getName())])) {
             $ev->setCancelled();
             return;
         }
     }
     if ($ev instanceof EntityDamageByEntityEvent) {
         if ($ev->getDamager() instanceof Player) {
             if (isset($this->watchers[strtolower($ev->getDamager()->getName())])) {
                 $ev->setCancelled();
                 return;
             }
         }
     }
 }
 /**
  * @priority LOWEST
  */
 public function onEntityInteract(EntityDamageEvent $ev)
 {
     if ($ev->isCancelled()) {
         return;
     }
     if (!$ev instanceof EntityDamageByEntityEvent) {
         return;
     }
     $giver = $ev->getDamager();
     if (!$giver instanceof Player) {
         return;
     }
     $taker = $ev->getEntity();
     if (!$taker instanceof TraderNpc) {
         return;
     }
     $ev->setCancelled();
     // OK, now what...
     if ($giver->isCreative() || $giver->isSpectator()) {
         $giver->sendMessage(mc::_("No purchases while in %1% mode.", MPMU::gamemodeStr($giver->getGamemode())));
         return;
     }
     $shop = $taker->namedtag->shop->getValue();
     if (!isset($this->keepers[$shop])) {
         $this->owner->getLogger()->error(mc::_("Invalid shop %5% for NPC at %1%,%2%,%3% (%4%)", $taker->floorX(), $taker->floorY(), $taker->floorZ(), $taker->getLevel()->getName(), $shop));
         $giver->sendMessage(mc::_("Sorry, shop is closed!"));
         return;
     }
     $hand = $giver->getInventory()->getItemInHand();
     if ($this->owner->getCurrency() !== false ? $hand->getId() == $this->owner->getCurrency() : $hand->getId() == Item::GOLD_INGOT) {
         // OK, we want to buy stuff...
         $this->owner->getServer()->getScheduler()->scheduleDelayedTask(new PluginCallbackTask($this->owner, [$this, "startTrade"], [$giver, $taker, $shop]), 10);
     } else {
         if ($this->owner->isWeapon($hand)) {
             $this->shopMsg($giver, $shop, "under-attack");
             $giver->attack($this->keepers[$shop]["attack"], new EntityDamageByEntityEvent($taker, $giver, EntityDamageEvent::CAUSE_ENTITY_ATTACK, $this->keepers[$shop]["attack"], 1.0));
         } else {
             $this->shopMsg($giver, $shop, "help-info");
         }
     }
 }
Example #16
0
 public function entityBaseTick()
 {
     Timings::$timerEntityBaseTick->startTiming();
     parent::entityBaseTick();
     if ($this->dead !== true and $this->isInsideOfSolid()) {
         $this->server->getPluginManager()->callEvent($ev = new EntityDamageEvent($this, EntityDamageEvent::CAUSE_SUFFOCATION, 1));
         if (!$ev->isCancelled()) {
             $this->attack($ev->getFinalDamage(), $ev);
         }
     }
     if ($this->dead !== true and $this->isInsideOfWater()) {
         --$this->airTicks;
         if ($this->airTicks <= -20) {
             $this->airTicks = 0;
             $this->server->getPluginManager()->callEvent($ev = new EntityDamageEvent($this, EntityDamageEvent::CAUSE_DROWNING, 2));
             if (!$ev->isCancelled()) {
                 $this->attack($ev->getFinalDamage(), $ev);
             }
         }
         $this->extinguish();
     } else {
         $this->airTicks = 300;
     }
     if ($this->attackTime > 0) {
         --$this->attackTime;
     }
     Timings::$timerEntityBaseTick->stopTiming();
 }
Example #17
0
 public function onEntityDamage(EntityDamageEvent $event)
 {
     if ($event->isCancelled()) {
         return;
     }
     $damagedEntity = $event->getEntity();
     if ($event instanceof EntityDamageByEntityEvent && $event->getFinalDamage() > $damagedEntity->getHealth()) {
         $attacker = $event->getDamager();
         if ($attacker instanceof Player) {
             if ($damagedEntity instanceof Player && !self::$pvpEnabled) {
                 $event->setCancelled();
                 return;
             }
             $attackerPlayer = $this->getRPGPlayerByName($attacker->getName());
             if ($attackerPlayer !== null) {
                 $xp = 0;
                 $xpPercentage = 0;
                 foreach ($this->getConfiguration("kill-exp", ["default" => 10]) as $id => $amount) {
                     if ($id === "default" || $id === $damagedEntity::NETWORK_ID) {
                         $xp = $amount;
                     }
                 }
                 foreach ($this->getConfiguration("kill-exp-percentage", ["default" => 0.01]) as $id => $amount) {
                     if ($id === "default" || $id === $damagedEntity::NETWORK_ID) {
                         $xpPercentage = $amount;
                     }
                 }
                 $attackerPlayer->addXp($xp + $attackerPlayer->getNeededXP() * ($xpPercentage / 100));
             }
         }
     }
     if (!$damagedEntity instanceof Player) {
         return;
     }
     if (!$this->isValidPlayer($damagedEntity)) {
         return;
     }
     $formerHealth = $this->players[$damagedEntity->getName()]->getHealth();
     $this->getRPGPlayerByName($damagedEntity->getName())->setHealth($formerHealth - $event->getFinalDamage());
     $event->setDamage(0);
     $event->setDamage(0, EntityDamageEvent::MODIFIER_STRENGTH);
     $event->setDamage(0, EntityDamageEvent::MODIFIER_WEAKNESS);
     $event->setDamage(0, EntityDamageEvent::MODIFIER_ARMOR);
     $event->setDamage(0, EntityDamageEvent::MODIFIER_RESISTANCE);
 }
Example #18
0
 public function onEntityDamage(EntityDamageEvent $event)
 {
     if ($event->isCancelled()) {
         return;
     }
     $player = $event->getEntity();
     if (!$player instanceof Player) {
         return;
     }
     if (!isset(self::$players[$player->getName()])) {
         return;
     }
     $xcelPlayer = self::$players[$player->getName()];
     if (($game = $xcelPlayer->getGame()) === null) {
         return;
     }
     switch ($game->getStatus()) {
         case XcelGame::STATUS_PREPARING:
             $event->setCancelled();
             break;
         case XcelGame::STATUS_IN_GAME:
             if ($event instanceof EntityDamageByEntityEvent) {
                 $damager = $event->getDamager();
                 if ($damager instanceof Player) {
                     if (isset(self::$players[$damager->getName()])) {
                         $xcelDamager = self::$players[$damager->getName()];
                         if ($this->isSameGame($xcelPlayer->getGame(), $xcelDamager->getGame()) && $xcelDamager->getGame()->canPvP($xcelDamager, $xcelPlayer)) {
                         } else {
                             $event->setCancelled();
                             break;
                         }
                     } else {
                         $event->setCancelled();
                         break;
                     }
                 }
             } else {
                 if (!$xcelPlayer->getGame()->canBeDamaged($xcelPlayer, $event)) {
                     $event->setCancelled();
                     switch ($event->getCause()) {
                         case EntityDamageEvent::CAUSE_BLOCK_EXPLOSION:
                         case EntityDamageEvent::CAUSE_CONTACT:
                         case EntityDamageEvent::CAUSE_CUSTOM:
                         case EntityDamageEvent::CAUSE_ENTITY_ATTACK:
                         case EntityDamageEvent::CAUSE_ENTITY_EXPLOSION:
                         case EntityDamageEvent::CAUSE_FALL:
                         case EntityDamageEvent::CAUSE_FIRE:
                         case EntityDamageEvent::CAUSE_FIRE_TICK:
                         case EntityDamageEvent::CAUSE_MAGIC:
                         case EntityDamageEvent::CAUSE_PROJECTILE:
                             break;
                         case EntityDamageEvent::CAUSE_DROWNING:
                         case EntityDamageEvent::CAUSE_LAVA:
                         case EntityDamageEvent::CAUSE_SUFFOCATION:
                         case EntityDamageEvent::CAUSE_SUICIDE:
                         case EntityDamageEvent::CAUSE_VOID:
                             $event->getEntity()->teleport($game->getWorld()->getSpawnLocation());
                             break;
                     }
                     break;
                 }
             }
             if ($player->getHealth() <= $event->getFinalDamage()) {
                 $event->setCancelled();
                 $xcelPlayer->getGame()->onPlayerDeath($xcelPlayer);
             }
     }
 }
Example #19
0
 public function onEntityDamage(EntityDamageEvent $event)
 {
     $p = $event->getEntity();
     if ($event->isCancelled() || !$p instanceof Player || $event->getCause() > 11) {
         return;
     }
     $w = strtolower($p->getLevel()->getFolderName());
     if ($event instanceof EntityDamageByEntityEvent) {
         if (!in_array($w, $this->wm["PVP"])) {
             $dmg = $event->getDamager();
             if ($dmg instanceof Player) {
                 if (!$dmg->hasPermission("mineblock.worldmanager.worldpvp.pvp")) {
                     $event->setCancelled();
                     $dmg->sendMessage("[PVP Manager] PVP 권한이 없습니다.");
                 }
             }
         }
     }
 }
Example #20
0
 public function onEntityInteract(EntityDamageEvent $event)
 {
     $perm = "yeah";
     if ($event->isCancelled()) {
         return;
     }
     $taker = $event->getEntity();
     if ($taker instanceof SlapperHuman || $taker instanceof SlapperSheep || $taker instanceof SlapperPigZombie || $taker instanceof SlapperVillager || $taker instanceof SlapperCaveSpider || $taker instanceof SlapperZombie || $taker instanceof SlapperChicken || $taker instanceof SlapperSpider || $taker instanceof SlapperSilverfish || $taker instanceof SlapperPig || $taker instanceof SlapperCow || $taker instanceof SlapperSlime || $taker instanceof SlapperLavaSlime || $taker instanceof SlapperEnderman || $taker instanceof SlapperMushroomCow || $taker instanceof SlapperBat || $taker instanceof SlapperCreeper || $taker instanceof SlapperSkeleton || $taker instanceof SlapperSquid || $taker instanceof SlapperWolf) {
         if (!$event instanceof EntityDamageByEntityEvent) {
             $event->setCancelled(true);
         }
         if ($event instanceof EntityDamageByEntityEvent) {
             $hitter = $event->getDamager();
             if (!$hitter instanceof Player) {
                 $event->setCancelled(true);
             }
             if ($hitter instanceof Player) {
                 $takerName = str_replace("\n", "", TextFormat::clean(strtolower($taker->getName())));
                 $giverName = $hitter->getName();
                 if ($hitter instanceof Player) {
                     if (isset($this->hitSessions[$giverName])) {
                         if ($this->hitSessions[$giverName] = "on") {
                             $taker->getInventory->clearAll();
                             $taker->kill();
                             unset($this->hitSessions[$giverName]);
                         }
                     }
                     $configPart = strtolower($this->getConfig()->get($takerName));
                     if (!$hitter->hasPermission("slapper.hit")) {
                         $event->setCancelled(true);
                         $perm = "nah";
                     }
                     if ($configPart == null && $perm === "nah") {
                         $configPart = $this->getConfig()->get("FallbackCommand");
                     }
                     if ($perm == "nah") {
                         foreach ($configPart as $commandNew) {
                             $this->getServer()->dispatchCommand(new ConsoleCommandSender(), str_replace("{player}", $giverName, $commandNew));
                         }
                     }
                 }
             }
         }
     }
 }
Example #21
0
 public function onEntityInteract(EntityDamageEvent $ev)
 {
     if ($ev->isCancelled()) {
         return;
     }
     $taker = $ev->getEntity();
     if (!$ev instanceof EntityDamageByBlockEvent) {
         $didItWork = "No";
         $isInvalid = "No";
         $doNotCheck = "No";
         $takerSaveId = "Default";
         $giverSaveId = "Default";
         $wasAnArrow = "No";
         $noCommand = "No";
         $takerName = "FallbackCommand";
         if ($taker instanceof Player) {
             return;
         }
         if (!$ev instanceof EntityDamageByEntityEvent) {
             $doNotCheck = "Yes";
         }
         if ($ev instanceof EntityDamageByEntityEvent) {
             $giver = $ev->getDamager();
             if (!$giver instanceof Player) {
                 $giverSaveId = $giver->getSaveId();
             }
             $takerSaveId = $taker->getSaveId();
         }
         if ($ev instanceof EntityDamageByChildEntityEvent) {
             $noCommand = "Yes";
             $wasAnArrow = "Yes";
         }
         if (!($takerSaveId == "Human")) {
             $isInvalid = "Yes";
         }
         if (!($takerSaveId == "Default")) {
             if ($doNotCheck == "No") {
                 $takerName = $taker->getName();
                 $giverName = $giver->getName();
                 if ($giver->hasPermission("slapper.hit")) {
                     $didItWork = "Yes";
                 }
                 if ($isInvalid == "No" && $didItWork == "No") {
                     $ev->setCancelled();
                 }
             }
             if ($wasAnArrow == "Yes" && $isInvalid == "No") {
                 $ev->setCancelled();
             }
             if ($didItWork === "No") {
                 if ($isInvalid == "No" && $noCommand == "No") {
                     $configPart = $this->getConfig()->get($takerName);
                     if ($configPart == null) {
                         $configPart = $this->getConfig()->get("FallbackCommand");
                     }
                     foreach ($configPart as $commandNew) {
                         $this->getServer()->dispatchCommand(new ConsoleCommandSender(), str_replace("{player}", $giverName, $commandNew));
                     }
                 }
             }
         }
     }
 }
Example #22
0
 public function attack($damage, EntityDamageEvent $source)
 {
     if ($source->isCancelled()) {
         return;
     }
     if ($source->getCause() == EntityDamageEvent::CAUSE_FALL) {
         $source->setCancelled();
         return;
     }
     parent::attack($damage, $source);
 }
Example #23
0
 public function fall($fallDistance)
 {
     $damage = floor($fallDistance - 3);
     if ($damage > 0) {
         $this->server->getPluginManager()->callEvent($ev = new EntityDamageEvent($this, EntityDamageEvent::CAUSE_FALL, $damage));
         if ($ev->isCancelled()) {
             return;
         }
         $this->attack($ev->getFinalDamage(), $ev);
     }
 }
 /**
  * @priority LOWEST
  */
 public function onPlayerPayment(EntityDamageEvent $ev)
 {
     if ($ev->isCancelled()) {
         return;
     }
     if (!$ev instanceof EntityDamageByEntityEvent) {
         return;
     }
     $giver = $ev->getDamager();
     $taker = $ev->getEntity();
     if (!$giver instanceof Player) {
         return;
     }
     if ($giver->isCreative() || $giver->isSpectator()) {
         return;
     }
     $hand = $giver->getInventory()->getItemInHand();
     if ($hand->getId() == $this->owner->getCurrency() && $this->owner->getCurrency()) {
         if ($taker instanceof Player) {
             if ($taker->isCreative() || $taker->isSpectator()) {
                 $giver->sendMessage(mc::_("No trading possible, %1% is in %2% mode", $taker->getDisplayName(), MPMU::gamemodeStr($taker->getGamemode())));
                 return;
             }
             $ev->setCancelled();
             // OK, we want to pay, not to fight!
             $this->onPlayerPaid($giver, $taker);
         }
         //else paying an Entity!
         return;
     }
     if (isset($this->goods[$hand->getId()])) {
         if ($taker instanceof Player) {
             if ($taker->isCreative() || $taker->isSpectator()) {
                 $giver->sendMessage(mc::_("No trading possible, %1% is in %2% mode", $taker->getDisplayName(), MPMU::gamemodeStr($taker->getGamemode())));
                 return;
             }
             $ev->setCancelled();
             // OK, we are trading
             $this->onPlayerTrade($giver, $taker);
         }
         //else trading with entity...
         return;
     }
 }
Example #25
0
 public function i_onDamage(EntityDamageEvent $event, &$victimSession)
 {
     $victim = $event->getEntity();
     if (!$victim instanceof Player) {
         return;
     }
     $victimSession = $this->getMain()->getSessions()->getSession($victim);
     if (!$victimSession->inSession($this)) {
         return;
     }
     $origCancelled = $event->isCancelled();
     $event->setCancelled(false);
     if (!$event instanceof EntityDamageByEntityEvent) {
         if ($event->getCause() === EntityDamageEvent::CAUSE_SUFFOCATION) {
             $event->setCancelled();
             $victimSession->teleport(Settings::kitpvp_spawn($this->getMain()->getServer()));
             return;
         }
         if ($event->getCause() === EntityDamageEvent::CAUSE_FALL) {
             $fallCause = $victim->getLastDamageCause();
             if ($fallCause instanceof EntityDamageByEntityEvent) {
                 if (isset($fallCause->_legionpeEta_timestamp) and microtime(true) - $fallCause->_legionpeEta_timestamp < 2) {
                     /** @noinspection PhpUndefinedFieldInspection */
                     $event->_legionpeEta_fallCause = $fallCause;
                 }
             }
         }
         return;
     }
     $victim = $event->getEntity();
     $damager = $event->getDamager();
     if (!$victim instanceof Player or !$damager instanceof Player) {
         return;
     }
     $attackerSession = $this->main->getSessions()->getSession($damager);
     if (!$attackerSession->inSession($this)) {
         $event->setCancelled($origCancelled);
         return;
     }
     $hitterData = $this->playerData[$attackerSession->getUID()];
     $victimData = $this->playerData[$victimSession->getUID()];
     if ($hitterData->invulnerable) {
         $attackerSession->tell("You are in invulnerability mode!");
         $event->setCancelled();
         return;
     }
     if ($victimData->invulnerable) {
         $attackerSession->tell("The vicitm is in invulnerability mode!");
         $event->setCancelled();
         return;
     }
     if (Settings::kitpvp_isSafeArea($victim) or Settings::kitpvp_isSafeArea($damager)) {
         $event->setCancelled();
         $attackerSession->tell("You may not attack players at/from spawn!");
     } elseif ($hitterData->areFriends($victimSession->getUID())) {
         $event->setCancelled();
     } else {
         /** @noinspection PhpUndefinedFieldInspection */
         $event->_legionpeEta_timestamp = microtime(true);
         /** @noinspection PhpUndefinedFieldInspection */
         $event->_legionpeEta_isLadder = $victim->getLevel()->getBlockIdAt($victim->getFloorX(), $victim->getFloorY(), $victim->getFloorZ()) === Block::LADDER;
         if ($event instanceof EntityDamageByChildEntityEvent) {
             $child = $event->getChild();
             if ($child instanceof Snowball) {
                 $event->setKnockBack($event->getKnockBack() * 2.5);
             } elseif ($child instanceof Arrow) {
                 $points = 0;
                 if (!$event->isApplicable(EntityDamageEvent::MODIFIER_ARMOR)) {
                     $armorValues = [Item::LEATHER_CAP => 1, Item::LEATHER_TUNIC => 3, Item::LEATHER_PANTS => 2, Item::LEATHER_BOOTS => 1, Item::CHAIN_HELMET => 1, Item::CHAIN_CHESTPLATE => 5, Item::CHAIN_LEGGINGS => 4, Item::CHAIN_BOOTS => 1, Item::GOLD_HELMET => 1, Item::GOLD_CHESTPLATE => 5, Item::GOLD_LEGGINGS => 3, Item::GOLD_BOOTS => 1, Item::IRON_HELMET => 2, Item::IRON_CHESTPLATE => 6, Item::IRON_LEGGINGS => 5, Item::IRON_BOOTS => 2, Item::DIAMOND_HELMET => 3, Item::DIAMOND_CHESTPLATE => 8, Item::DIAMOND_LEGGINGS => 6, Item::DIAMOND_BOOTS => 3];
                     foreach ($attackerSession->getPlayer()->getInventory()->getArmorContents() as $armor) {
                         if (isset($armorValues[$armor->getId()])) {
                             $points += $armorValues[$armor->getId()];
                         }
                     }
                 }
                 list(, , , $damage, $fire, $knockPct) = Settings::kitpvp_getBowInfo($hitterData->getBowLevel());
                 $event->setDamage(max($damage - $points, 0));
                 if ($fire > 0) {
                     $victim->setOnFire($fire / 20);
                     $this->getMain()->getServer()->getScheduler()->scheduleDelayedTask(new CallbackPluginTask($this->getMain(), function () use($victim) {
                         $victim->setOnFire(0);
                     }), $fire);
                 }
                 if ($knockPct > 0) {
                     $event->setKnockBack($event->getKnockBack() * (1 + $knockPct / 100));
                     // what the, I put / as *?
                 }
             }
         }
     }
 }