setDamage() public method

public setDamage ( float $damage, integer $type = self::MODIFIER_BASE )
$damage float
$type integer
コード例 #1
0
ファイル: Tnt.php プロジェクト: XxmellonxX/MTNT1B
 public function onDamage(EntityDamageEvent $event)
 {
     $player = $event->getEntity();
     $entity = $event->getEntity();
     if ($player instanceof Player && $event->getCause() === EntityDamageEvent::CAUSE_ENTITY_EXPLOSION) {
         switch (mt_rand(1, 2)) {
             case 1:
                 $event->setDamage(10);
                 break;
             case 2:
                 $event->setDamage(8);
                 break;
         }
     }
 }
コード例 #2
0
ファイル: ArrowAbility.php プロジェクト: stoastye85/Plugins
 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);
     }
 }
コード例 #3
0
ファイル: StartDASH.php プロジェクト: EmreTr1/rtr
 public function fallenDamagePrevent(EntityDamageEvent $event)
 {
     if ($event->getCause() == EntityDamageEvent::CAUSE_FALL) {
         if (!$event->getEntity() instanceof Player) {
             return;
         }
         if ($event->getEntity()->y > 0) {
             $event->setDamage(0);
             $event->setCancelled();
         }
     }
 }
コード例 #4
0
ファイル: Archery.php プロジェクト: HelloWorld017/ToAruArcher
 public function onEntityHitByProjectile(EntityDamageEvent $event)
 {
     if (!$event instanceof EntityDamageByEntityEvent) {
         return;
     }
     $damager = $event->getDamager();
     if (!$damager instanceof Projectile) {
         return;
     }
     if (isset($damager->namedtag["ArcheryDamage"])) {
         $event->setDamage($damager->namedtag["ArcheryDamage"]);
     }
 }
コード例 #5
0
 /**
  * @priority LOWEST
  */
 public function onDamage(EntityDamageEvent $event)
 {
     // Try keep the player alive while on transit...
     $victim = $event->getEntity();
     if (!$victim instanceof Player) {
         return;
     }
     $vname = $victim->getName();
     if (!isset($this->teleporters[$vname])) {
         return;
     }
     if (time() - $this->teleporters[$vname] > 2) {
         unset($this->teleporters[$vname()]);
         return;
     }
     $victim->heal($event->getDamage());
     $event->setDamage(0);
     $event->setCancelled(true);
 }
コード例 #6
0
ファイル: Main.php プロジェクト: EpicArtz08999/Ezeron
 public function onHurt(EntityDamageEvent $ev)
 {
     $p = $ev->getEntity();
     if ($ev instanceof EntityDamageByEntityEvent) {
         $damager = $ev->getDamager();
         if ($damager instanceof Player) {
             if ($damager->getInventory()->getItemInHand()->getId() === 369) {
                 $ev->setKnockBack(0.5);
                 $ev->setDamage($ev->getDamage() + 3);
                 $x = $p->getX();
                 $y = $p->getY();
                 $z = $p->getZ();
                 $r = mt_rand(0, 255);
                 $g = mt_rand(0, 255);
                 $b = mt_rand(0, 255);
                 $p->getLevel()->addParticle(new DustParticle(new Vector3($x, $y, $z), $r, $g, $b));
                 $p->addEffect(Effect::getEffect(9)->setAmplifier(1)->setDuration(20)->setVisible(true));
                 $level = $damager->getLevel();
                 $damager->getLevel()->addSound(new AnvilFallSound($damager->getLocation()));
             }
         }
     }
 }
コード例 #7
0
ファイル: Animalworld.php プロジェクト: ianju/AnimalWorld
 public function AllDamage(EntityDamageEvent $event)
 {
     //僵尸击退修复
     if ($event instanceof EntityDamageByEntityEvent) {
         $p = $event->getDamager();
         $zo = $event->getEntity();
         if (isset($this->animals[$zo->getId()]) and $zo instanceof Zombie or $zo instanceof Villager) {
             if ($p instanceof Player) {
                 $weapon = $p->getInventory()->getItemInHand()->getID();
                 //得到玩家手中的武器
                 $high = 0;
                 if ($weapon == 258 or $weapon == 271 or $weapon == 275) {
                     //击退x5
                     $back = 0.7;
                 } elseif ($weapon == 267 or $weapon == 272 or $weapon == 279 or $weapon == 283 or $weapon == 286) {
                     //击退x1
                     $back = 1;
                 } elseif ($weapon == 276) {
                     //击退x2
                     $back = 2;
                 } elseif ($weapon == 292) {
                     //击退x10
                     $back = 10;
                     $high = 5;
                 } else {
                     $back = 0.5;
                 }
                 $zom =& $this->animals[$zo->getId()];
                 if (isset($this->dogs[$zo->getId()])) {
                     if ($weapon = 352) {
                         $dog =& $this->dogs[$zo->getId()];
                         if ($dog['love'] != 9999) {
                             if ($p->getinventory()->getItemInHand()->getID() == 352) {
                                 //var_dump("玩家".$p->getName()."喂养了ID为".$zo->getId()."的wolf");
                                 $p->getinventory()->removeItem(new Item(352, $p->getInventory()->getItemInHand()->getDamage(), 1));
                                 $pos3 = new Vector3($zom['x'], $zom['y'] + 1, $zom['z'], $zo->getLevel());
                                 $pos4 = new Vector3($zom['x'], $zom['y'], $zom['z'], $zo->getLevel());
                                 $w1 = new HeartParticle($pos3);
                                 $w2 = new HeartParticle($pos4);
                                 $zo->getLevel()->addParticle($w1);
                                 $zo->getLevel()->addParticle($w2);
                                 if ($dog['love'] == 10 or $dog['love'] == 9999) {
                                     $dog['love'] = 9999;
                                     $dog['owner'] = $p->getName();
                                     $p->sendTip(TextFormat::GREEN . "驯养成功!");
                                 } else {
                                     $dog['love'] = $dog['love'] + 1;
                                     $dog['owner'] = $p->getName();
                                 }
                                 $event->setDamage(0);
                                 $event->setKnockBack(0);
                             }
                         } else {
                             $zom['IsChasing'] = $p->getName();
                         }
                     }
                 }
                 @$zo->knockBack($p, 0, -$zom['xxx'] * $back, -$zom['zzz'] * $back, 0.4);
                 //var_dump("玩家".$p->getName()."攻击了ID为".$zo->getId()."的僵尸");
                 $zom['x'] = $zom['x'] - $zom['xxx'] * $back;
                 $zom['y'] = $zo->getY() + $high;
                 $zom['z'] = $zom['z'] - $zom['zzz'] * $back;
                 $pos2 = new Vector3($zom['x'], $zom['y'], $zom['z']);
                 //目标坐标
                 $zo->setPosition($pos2);
                 if ($zo->getHealth() - $event->getDamage() <= 0) {
                     //var_dump("玩家".$p->getName()."杀死了ID为".$zo->getId()."的僵尸");
                     unset($this->animals[$zo->getId()]);
                 }
             }
         }
     }
 }
コード例 #8
0
 public function onEntityDamageEvent(EntityDamageEvent $event)
 {
     if ($event instanceof EntityDamageByEntityEvent) {
         if ($event->getDamager() instanceof ExperienceOrb) {
             $event->setCancelled();
             return;
         }
         if ($event->getDamager() instanceof Player) {
             $attribute = $this->attributeprovider->getAttribute($event->getDamager());
             $enhance = $event->getDamage() * ($attribute->getExpLevel() / 100);
             $damage = $event->getDamage() + $enhance <= 15 ? $event->getDamage() - $enhance : 15;
             $event->setDamage($damage);
             HungerSystem::exhaustion($event->getDamager(), HungerSystem::RECEIVING_ANY_DAMAGE);
         }
         if ($event->getEntity() instanceof Player) {
             $attribute = $this->attributeprovider->getAttribute($event->getEntity());
             $protect = $event->getDamage() * ($attribute->getExpLevel() / 100);
             $damage = $event->getDamage() + $protect >= 1 ? $event->getDamage() - $protect : 1;
             $event->setDamage($damage);
             HungerSystem::exhaustion($event->getEntity(), HungerSystem::RECEIVING_ANY_DAMAGE);
         }
     }
 }
コード例 #9
0
 /**
  * @param EntityDamageEvent $event
  * @priority LOWEST
  */
 public function onDamage(EntityDamageEvent $event)
 {
     if ($event->isApplicable(EntityDamageEvent::MODIFIER_ARMOR) and ($damage = $event->getDamage(EntityDamageEvent::MODIFIER_ARMOR)) > 0) {
         $event->setDamage(-floor($event->getDamage() * 0.04 * $damage), EntityDamageEvent::MODIFIER_ARMOR);
     }
 }
コード例 #10
0
ファイル: EconomyEntities.php プロジェクト: EmreTr1/rtr
 public function onDamage(EntityDamageEvent $event)
 {
     if ($event->getEntity() instanceof Entities and $event instanceof EntityDamageByEntityEvent) {
         if (!$event->getDamager() instanceof Player) {
             return;
         }
         switch ($event->getEntity()->getType()) {
             case 10:
                 if (!isset($this->damage_delay[$event->getDamager()->getName()][$event->getEntity()->getId()])) {
                     if ($this->dead_id[$event->getDamager()->getName()] == $event->getEntity()->getId()) {
                         return;
                     }
                     $this->dead_id[$event->getDamager()->getName()] = $event->getEntity()->getId();
                     $event->getDamager()->getInventory()->addItem(Item::get($this->rewardList["chickin-item-id"], 0, $this->rewardList["chickin-item-count"]));
                     $event->getDamager()->sendMessage(TextFormat::DARK_AQUA . $this->get("success-get-egg"));
                     $this->damage_delay[$event->getDamager()->getName()][$event->getEntity()->getId()] = $this->makeTimestamp(date("Y-m-d H:i:s"));
                 } else {
                     $before = $this->damage_delay[$event->getDamager()->getName()][$event->getEntity()->getId()];
                     $after = $this->makeTimestamp(date("Y-m-d H:i:s"));
                     $timeout = intval($after - $before);
                     if ($timeout < $this->config["Reward-DelayTime"]) {
                         $event->getDamager()->sendMessage(TextFormat::RED . $this->get("not-yet-ready-egg"));
                     } else {
                         if ($this->dead_id[$event->getDamager()->getName()] == $event->getEntity()->getId()) {
                             return;
                         }
                         $this->dead_id[$event->getDamager()->getName()] = $event->getEntity()->getId();
                         $event->getDamager()->getInventory()->addItem(Item::get($this->rewardList["chickin-item-id"], 0, $this->rewardList["chickin-item-count"]));
                         $event->getDamager()->sendMessage(TextFormat::DARK_AQUA . $this->get("success-get-egg"));
                         unset($this->damage_delay[$event->getDamager()->getName()][$event->getEntity()->getId()]);
                     }
                 }
                 $event->setCancelled();
                 break;
             case 11:
                 if (!isset($this->damage_delay[$event->getDamager()->getName()][$event->getEntity()->getId()])) {
                     $event->setDamage(0);
                     if ($this->dead_id[$event->getDamager()->getName()] == $event->getEntity()->getId()) {
                         return;
                     }
                     $this->dead_id[$event->getDamager()->getName()] = $event->getEntity()->getId();
                     $event->getDamager()->getInventory()->addItem(Item::get($this->rewardList["cow-item-id"], 0, $this->rewardList["cow-item-count"]));
                     $event->getDamager()->sendMessage(TextFormat::DARK_AQUA . $this->get("success-get-steak"));
                     $this->damage_delay[$event->getDamager()->getName()][$event->getEntity()->getId()] = $this->makeTimestamp(date("Y-m-d H:i:s"));
                 } else {
                     $before = $this->damage_delay[$event->getDamager()->getName()][$event->getEntity()->getId()];
                     $after = $this->makeTimestamp(date("Y-m-d H:i:s"));
                     $timeout = intval($after - $before);
                     if ($timeout < $this->config["Reward-DelayTime"]) {
                         $event->getDamager()->sendMessage(TextFormat::RED . $this->get("not-yet-ready-steak"));
                         $event->setCancelled();
                     } else {
                         $event->setDamage(0);
                         if ($this->dead_id[$event->getDamager()->getName()] == $event->getEntity()->getId()) {
                             return;
                         }
                         $this->dead_id[$event->getDamager()->getName()] = $event->getEntity()->getId();
                         $event->getDamager()->getInventory()->addItem(Item::get($this->rewardList["cow-item-id"], 0, $this->rewardList["cow-item-count"]));
                         $event->getDamager()->sendMessage(TextFormat::DARK_AQUA . $this->get("success-get-steak"));
                         unset($this->damage_delay[$event->getDamager()->getName()][$event->getEntity()->getId()]);
                     }
                 }
                 break;
             case 12:
                 if (!isset($this->damage_delay[$event->getDamager()->getName()][$event->getEntity()->getId()])) {
                     $event->setDamage(0);
                     if ($this->dead_id[$event->getDamager()->getName()] == $event->getEntity()->getId()) {
                         return;
                     }
                     $this->dead_id[$event->getDamager()->getName()] = $event->getEntity()->getId();
                     $event->getDamager()->getInventory()->addItem(Item::get($this->rewardList["pig-item-id"], 0, $this->rewardList["pig-item-count"]));
                     $event->getDamager()->sendMessage(TextFormat::DARK_AQUA . $this->get("success-get-pork"));
                     $this->damage_delay[$event->getDamager()->getName()][$event->getEntity()->getId()] = $this->makeTimestamp(date("Y-m-d H:i:s"));
                 } else {
                     $before = $this->damage_delay[$event->getDamager()->getName()][$event->getEntity()->getId()];
                     $after = $this->makeTimestamp(date("Y-m-d H:i:s"));
                     $timeout = intval($after - $before);
                     if ($timeout < $this->config["Reward-DelayTime"]) {
                         $event->getDamager()->sendMessage(TextFormat::RED . $this->get("not-yet-ready-pork"));
                         $event->setCancelled();
                     } else {
                         $event->setDamage(0);
                         if ($this->dead_id[$event->getDamager()->getName()] == $event->getEntity()->getId()) {
                             return;
                         }
                         $this->dead_id[$event->getDamager()->getName()] = $event->getEntity()->getId();
                         $event->getDamager()->getInventory()->addItem(Item::get($this->rewardList["pig-item-id"], 0, $this->rewardList["pig-item-count"]));
                         $event->getDamager()->sendMessage(TextFormat::DARK_AQUA . $this->get("success-get-pork"));
                         unset($this->damage_delay[$event->getDamager()->getName()][$event->getEntity()->getId()]);
                     }
                 }
                 break;
             case 13:
                 if (!isset($this->damage_delay[$event->getDamager()->getName()][$event->getEntity()->getId()])) {
                     if ($this->dead_id[$event->getDamager()->getName()] == $event->getEntity()->getId()) {
                         return;
                     }
                     $this->dead_id[$event->getDamager()->getName()] = $event->getEntity()->getId();
                     $event->getDamager()->getInventory()->addItem(Item::get($this->rewardList["sheep-item-id"], 0, $this->rewardList["sheep-item-count"]));
                     $event->getDamager()->sendMessage(TextFormat::DARK_AQUA . $this->get("success-get-wool"));
                     $this->damage_delay[$event->getDamager()->getName()][$event->getEntity()->getId()] = $this->makeTimestamp(date("Y-m-d H:i:s"));
                 } else {
                     $before = $this->damage_delay[$event->getDamager()->getName()][$event->getEntity()->getId()];
                     $after = $this->makeTimestamp(date("Y-m-d H:i:s"));
                     $timeout = intval($after - $before);
                     if ($timeout < $this->config["Reward-DelayTime"]) {
                         $event->getDamager()->sendMessage(TextFormat::RED . $this->get("not-yet-ready-wool"));
                     } else {
                         if ($this->dead_id[$event->getDamager()->getName()] == $event->getEntity()->getId()) {
                             return;
                         }
                         $this->dead_id[$event->getDamager()->getName()] = $event->getEntity()->getId();
                         $event->getDamager()->getInventory()->addItem(Item::get($this->rewardList["sheep-item-id"], 0, $this->rewardList["sheep-item-count"]));
                         $event->getDamager()->sendMessage(TextFormat::DARK_AQUA . $this->get("success-get-wool"));
                         unset($this->damage_delay[$event->getDamager()->getName()][$event->getEntity()->getId()]);
                     }
                 }
                 $event->setCancelled();
                 break;
             case 15:
                 if ($event->getEntity()->getHealth() - $event->getDamage() <= 0) {
                     if ($this->dead_id[$event->getDamager()->getName()] == $event->getEntity()->getId()) {
                         return;
                     }
                     $this->dead_id[$event->getDamager()->getName()] = $event->getEntity()->getId();
                     $event->getDamager()->getInventory()->addItem(Item::get(array_rand($this->rewardList["villager-item-id"]), 0, $this->rewardList["villager-item-count"]));
                     $event->getDamager()->sendMessage(TextFormat::DARK_AQUA . $this->get("success-get-villager-item"));
                 }
                 break;
             case 34:
                 if ($event->getEntity()->getHealth() - $event->getDamage() <= 0) {
                     if ($this->dead_id[$event->getDamager()->getName()] == $event->getEntity()->getId()) {
                         return;
                     }
                     $this->dead_id[$event->getDamager()->getName()] = $event->getEntity()->getId();
                     $event->getDamager()->getInventory()->addItem(Item::get($this->rewardList["skelleton-item-id"], 0, $this->rewardList["skelleton-item-count"]));
                     $event->getDamager()->sendMessage(TextFormat::DARK_AQUA . $this->get("success-get-skelleton-item"));
                 }
         }
     }
 }
コード例 #11
0
ファイル: Trampoline.php プロジェクト: EmreTr1/rtr
 public function fallenDamagePrevent(EntityDamageEvent $event)
 {
     if ($event->getCause() == EntityDamageEvent::CAUSE_FALL) {
         if (!$event->getEntity() instanceof Player) {
             return;
         }
         if (isset($this->fallen[$event->getEntity()->getName()])) {
             $event->setDamage(0);
             $this->fallen[$event->getEntity()->getName()]--;
             if ($this->fallen[$event->getEntity()->getName()] == 0) {
                 unset($this->fallen[$event->getEntity()->getName()]);
             }
         }
     }
 }
コード例 #12
0
ファイル: ToAruPG.php プロジェクト: HelloWorld017/ToAruPG
 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);
 }
コード例 #13
0
ファイル: Annihilator.php プロジェクト: DRPlugins/PM-Plugins
 public function onHurtf(EntityDamageEvent $event)
 {
     //$cause = $event->getCause();
     //arrow check for the catchy phrase thing :PPP
     $causet = $event->getCause();
     if ($causet === 2) {
         $arrowed = true;
     } else {
         $arrowed = false;
     }
     $pr = $event->getEntity();
     $cause = $pr->getLastDamageCause();
     if ($cause instanceof EntityDamageByEntityEvent) {
         $dam = $event->getDamager()->getName();
         $ent = $event->getEntity()->getPlayer()->getName();
         if ($arrowed) {
             if (!is_file($this->getDataFolder() . $dam . ".json")) {
                 return true;
             }
             $file = file_get_contents($this->getDataFolder() . $dam . ".json");
             $decode = json_decode($file, true);
             if (isset($decode["annihilator"]) and $decode["annihilator"] === "yes") {
                 $nt = $event->getEntity()->getPlayer();
                 $event->setDamage(0);
                 $spawn = $nt->getSpawn();
                 $nt->teleport($spawn, $nt->getYaw(), $nt->getPitch());
                 $this->getServer()->getPlayer($ent)->sendMessage("One-shot, one kill! You didn't even see that coming!");
                 return true;
             } else {
                 return true;
             }
         }
         $this->killer[$dam] = strval($ent);
         if ($dam instanceof Player) {
             $ms = $dam;
             if (!\is_file($this->getDataFolder() . $ms . ".json")) {
                 return true;
             }
             $hhd = file_get_contents($this->getDataFolder() . $ms . ".json");
             $dec = json_decode($hhd, true);
             if (isset($dec["annihilator"])) {
                 if ($dec["annihilator"] === "yes") {
                     $event->setDamage(PHP_INT_MAX);
                     return true;
                 }
             }
         }
         if ($dam instanceof Arrow) {
             $this->getLogger()->info("yeah!");
         }
     }
 }
コード例 #14
0
ファイル: Player.php プロジェクト: Cecil107/PocketMine-0.13.0
 public function attack($damage, EntityDamageEvent $source)
 {
     if (!$this->isAlive()) {
         return;
     }
     $source->setDamage(-floor($source->getDamage() * $this->inventory->calculateArmorModifiers($source) * 0.04), EntityDamageEvent::MODIFIER_ARMOR);
     if ($this->isCreative() and $source->getCause() !== EntityDamageEvent::CAUSE_SUICIDE and $source->getCause() !== EntityDamageEvent::CAUSE_VOID) {
         $source->setCancelled();
     } elseif ($this->allowFlight and $source->getCause() === EntityDamageEvent::CAUSE_FALL) {
         $source->setCancelled();
     }
     parent::attack($source->getFinalDamage(), $source);
     if ($source->isCancelled()) {
         return;
     }
     if ($source instanceof EntityDamageByEntityEvent || $source instanceof EntityDamageByChildEntityEvent) {
         $damager = $source->getDamager();
         $damage = 0;
         foreach ($this->inventory->getArmorContents() as $item) {
             if (($ench = $item->getEnchantment(Enchantment::TYPE_ARMOR_THORNS)) != null) {
                 $rnd = mt_rand(1, 100);
                 if ($rnd <= $ench->getLevel() * 15) {
                     $damage = mt_rand(1, 4);
                 }
             }
         }
         if ($damage > 0) {
             $damager->attack($damage, new EntityDamageEvent($damager, EntityDamageEvent::CAUSE_MAGIC, $damage));
         }
     }
     if ($this->getLastDamageCause() === $source and $this->spawned) {
         $pk = new EntityEventPacket();
         $pk->eid = 0;
         $pk->event = EntityEventPacket::HURT_ANIMATION;
         $this->dataPacket($pk);
         if ($this->getHealth() < 0 or $this->getHealth() == 0) {
             $pk = new RespawnPacket();
             $pos = $this->getSpawn();
             $pk->x = $pos->x;
             $pk->y = $pos->y;
             $pk->z = $pos->z;
             $this->dataPacket($pk);
         }
     }
 }
コード例 #15
0
ファイル: Main.php プロジェクト: The-Epic-Miner/MinigameBase
 public function onPlayerDeath(EntityDamageEvent $event)
 {
     if ($event->getEntity() instanceof Player) {
         if ($this->disablePlayerDeath) {
             if ($event->getDamage() >= $event->getEntity()->getHealth()) {
                 $event->setDamage(0.0);
                 $event->getEntity()->setHealth(20);
             }
         }
     }
     return;
 }
コード例 #16
0
ファイル: PvpGame.php プロジェクト: LegionPE/LegionPE-Eta
 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 *?
                 }
             }
         }
     }
 }