hasEffect() public method

public hasEffect ( $effectId )
 protected function addAttackerModifiers(Entity $damager)
 {
     if ($damager->hasEffect(Effect::STRENGTH)) {
         $this->setDamage($this->getDamage(self::MODIFIER_BASE) * 0.3 * ($damager->getEffect(Effect::STRENGTH)->getAmplifier() + 1), self::MODIFIER_STRENGTH);
     }
     if ($damager->hasEffect(Effect::WEAKNESS)) {
         $this->setDamage(-($this->getDamage(self::MODIFIER_BASE) * 0.2 * ($damager->getEffect(Effect::WEAKNESS)->getAmplifier() + 1)), self::MODIFIER_WEAKNESS);
     }
 }
 protected function addAttackerModifiers(Entity $damager)
 {
     if ($damager->hasEffect(Effect::STRENGTH)) {
         $this->setRateDamage(1 + 0.3 * ($damager->getEffect(Effect::STRENGTH)->getAmplifier() + 1), self::MODIFIER_STRENGTH);
     }
     if ($damager->hasEffect(Effect::WEAKNESS)) {
         $eff_level = 1 - 0.2 * ($damager->getEffect(Effect::WEAKNESS)->getAmplifier() + 1);
         if ($eff_level < 0) {
             $eff_level = 0;
         }
         $this->setRateDamage($eff_level, self::MODIFIER_WEAKNESS);
     }
 }
Example #3
0
 public function onEntityCollide(Entity $entity)
 {
     if (!$entity->hasEffect(Effect::FIRE_RESISTANCE)) {
         $ev = new EntityDamageByBlockEvent($this, $entity, EntityDamageEvent::CAUSE_FIRE, 1);
         $entity->attack($ev->getFinalDamage(), $ev);
     }
     $ev = new EntityCombustByBlockEvent($this, $entity, 8);
     Server::getInstance()->getPluginManager()->callEvent($ev);
     if (!$ev->isCancelled()) {
         $entity->setOnFire($ev->getDuration());
     }
 }
 /**
  * @param Entity    $entity
  * @param int       $cause
  * @param int|int[] $damage
  *
  * @throws \Exception
  */
 public function __construct(Entity $entity, $cause, $damage)
 {
     $this->entity = $entity;
     $this->cause = $cause;
     if (is_array($damage)) {
         $this->modifiers = $damage;
     } else {
         $this->modifiers = [self::MODIFIER_BASE => $damage];
     }
     $this->originals = $this->modifiers;
     if (!isset($this->modifiers[self::MODIFIER_BASE])) {
         throw new \InvalidArgumentException("BASE Damage modifier missing");
     }
     if ($entity->hasEffect(Effect::DAMAGE_RESISTANCE)) {
         $this->setDamage(-($this->getDamage(self::MODIFIER_BASE) * 0.2 * ($entity->getEffect(Effect::DAMAGE_RESISTANCE)->getAmplifier() + 1)), self::MODIFIER_RESISTANCE);
     }
 }
 public function onEntityCollide(Entity $entity)
 {
     $entity->fallDistance *= 0.5;
     $ProtectL = 0;
     if (!$entity->hasEffect(Effect::FIRE_RESISTANCE)) {
         $ev = new EntityDamageByBlockEvent($this, $entity, EntityDamageEvent::CAUSE_LAVA, 4);
         if ($entity->attack($ev->getFinalDamage(), $ev) === true) {
             $ev->useArmors();
         }
         $ProtectL = $ev->getMaxEnchantLevel();
     }
     $ev = new EntityCombustByBlockEvent($this, $entity, 15, $ProtectL);
     Server::getInstance()->getPluginManager()->callEvent($ev);
     if (!$ev->isCancelled()) {
         $entity->setOnFire($ev->getDuration());
     }
     $entity->resetFallDistance();
 }
Example #6
0
 public function onEntityCollide(Entity $entity)
 {
     $ProtectL = 0;
     if (!$entity->hasEffect(Effect::FIRE_RESISTANCE)) {
         $ev = new EntityDamageByBlockEvent($this, $entity, EntityDamageEvent::CAUSE_FIRE, 1);
         if ($entity->attack($ev->getFinalDamage(), $ev) === true) {
             $ev->useArmors();
         }
         $ProtectL = $ev->getFireProtectL();
     }
     $ev = new EntityCombustByBlockEvent($this, $entity, 8, $ProtectL);
     if ($entity instanceof Arrow) {
         $ev->setCancelled();
     }
     Server::getInstance()->getPluginManager()->callEvent($ev);
     if (!$ev->isCancelled()) {
         $entity->setOnFire($ev->getDuration());
     }
 }
Example #7
0
 /**
  * @param Entity    $entity
  * @param int       $cause
  * @param int|int[] $damage
  *
  * @throws \Exception
  */
 public function __construct(Entity $entity, $cause, $damage)
 {
     $this->entity = $entity;
     $this->cause = $cause;
     if (is_array($damage)) {
         $this->modifiers = $damage;
     } else {
         $this->modifiers = [self::MODIFIER_BASE => $damage];
     }
     $this->originals = $this->modifiers;
     if (!isset($this->modifiers[self::MODIFIER_BASE])) {
         throw new \InvalidArgumentException("BASE Damage modifier missing");
     }
     //For DAMAGE_RESISTANCE
     if ($cause !== self::CAUSE_VOID and $cause !== self::CAUSE_SUICIDE) {
         if ($entity->hasEffect(Effect::DAMAGE_RESISTANCE)) {
             $RES_level = 1 - 0.2 * ($entity->getEffect(Effect::DAMAGE_RESISTANCE)->getAmplifier() + 1);
             if ($RES_level < 0) {
                 $RES_level = 0;
             }
             $this->setRateDamage($RES_level, self::MODIFIER_RESISTANCE);
         }
     }
     //TODO: add zombie
     if ($entity instanceof Player and $entity->getInventory() instanceof PlayerInventory) {
         switch ($cause) {
             case self::CAUSE_CONTACT:
             case self::CAUSE_ENTITY_ATTACK:
             case self::CAUSE_PROJECTILE:
             case self::CAUSE_FIRE:
             case self::CAUSE_LAVA:
             case self::CAUSE_BLOCK_EXPLOSION:
             case self::CAUSE_ENTITY_EXPLOSION:
             case self::CAUSE_LIGHTNING:
                 $points = 0;
                 foreach ($entity->getInventory()->getArmorContents() as $index => $i) {
                     if ($i->isArmor()) {
                         $points += $i->getArmorValue();
                         $this->usedArmors[$index] = 1;
                     }
                 }
                 if ($points !== 0) {
                     $this->setRateDamage(1 - 0.04 * $points, self::MODIFIER_ARMOR);
                 }
                 //For Protection
                 $spe_Prote = null;
                 switch ($cause) {
                     case self::CAUSE_ENTITY_EXPLOSION:
                     case self::CAUSE_BLOCK_EXPLOSION:
                         $spe_Prote = Enchantment::TYPE_ARMOR_EXPLOSION_PROTECTION;
                         break;
                     case self::CAUSE_FIRE:
                     case self::CAUSE_LAVA:
                         $spe_Prote = Enchantment::TYPE_ARMOR_FIRE_PROTECTION;
                         break;
                     case self::CAUSE_PROJECTILE:
                         $spe_Prote = Enchantment::TYPE_ARMOR_PROJECTILE_PROTECTION;
                         break;
                     default:
                         break;
                 }
                 foreach ($this->usedArmors as $index => $cost) {
                     $i = $entity->getInventory()->getArmorItem($index);
                     if ($i->isArmor()) {
                         $this->EPF += $i->getEnchantmentLevel(Enchantment::TYPE_ARMOR_PROTECTION);
                         $this->fireProtectL = max($this->fireProtectL, $i->getEnchantmentLevel(Enchantment::TYPE_ARMOR_FIRE_PROTECTION));
                         if ($i->getEnchantmentLevel(Enchantment::TYPE_ARMOR_THORNS) > 0) {
                             $this->thornsLevel[$index] = $i->getEnchantmentLevel(Enchantment::TYPE_ARMOR_THORNS);
                         }
                         if ($spe_Prote !== null) {
                             $this->EPF += 2 * $i->getEnchantmentLevel($spe_Prote);
                         }
                     }
                 }
                 break;
             case self::CAUSE_FALL:
                 //Feather Falling
                 $i = $entity->getInventory()->getBoots();
                 if ($i->isArmor()) {
                     $this->EPF += $i->getEnchantmentLevel(Enchantment::TYPE_ARMOR_PROTECTION);
                     $this->EPF += 3 * $i->getEnchantmentLevel(Enchantment::TYPE_ARMOR_FALL_PROTECTION);
                 }
                 break;
             case self::CAUSE_FIRE_TICK:
             case self::CAUSE_SUFFOCATION:
             case self::CAUSE_DROWNING:
             case self::CAUSE_VOID:
             case self::CAUSE_SUICIDE:
             case self::CAUSE_MAGIC:
             case self::CAUSE_CUSTOM:
             case self::CAUSE_STARVATION:
                 break;
             default:
                 break;
         }
         if ($this->EPF !== 0) {
             $this->EPF = min(20, ceil($this->EPF * mt_rand(50, 100) / 100));
             $this->setRateDamage(1 - 0.04 * $this->EPF, self::MODIFIER_PROTECTION);
         }
     }
 }