本文整理汇总了PHP中pocketmine\entity\Entity::hasEffect方法的典型用法代码示例。如果您正苦于以下问题:PHP Entity::hasEffect方法的具体用法?PHP Entity::hasEffect怎么用?PHP Entity::hasEffect使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类pocketmine\entity\Entity
的用法示例。
在下文中一共展示了Entity::hasEffect方法的7个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的PHP代码示例。
示例1: addAttackerModifiers
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);
}
}
示例2: addAttackerModifiers
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);
}
}
示例3: onEntityCollide
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());
}
}
示例4: __construct
/**
* @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);
}
}
示例5: onEntityCollide
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();
}
示例6: onEntityCollide
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());
}
}
示例7: __construct
/**
* @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:
//.........这里部分代码省略.........