pocketmine\event\entity\EntityDamageEvent::__construct PHP Method

__construct() public method

public __construct ( Entity $entity, integer $cause, integer | int[] $damage )
$entity pocketmine\entity\Entity
$cause integer
$damage integer | int[]
    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);
            }
        }
    }

Usage Example

 /**
  * @param Entity    $damager
  * @param Entity    $entity
  * @param int       $cause
  * @param int|int[] $damage
  * @param float     $knockBack
  */
 public function __construct(Entity $damager, Entity $entity, $cause, $damage, $knockBack = 0.4)
 {
     $this->damager = $damager;
     $this->knockBack = $knockBack;
     parent::__construct($entity, $cause, $damage);
     $this->addAttackerModifiers($damager);
 }
All Usage Examples Of pocketmine\event\entity\EntityDamageEvent::__construct