public function remove(Entity $entity) { if ($entity instanceof Player) { $pk = new MobEffectPacket(); $pk->eid = 0; $pk->eventId = MobEffectPacket::EVENT_REMOVE; $pk->effectId = $this->getId(); $entity->dataPacket($pk); if ($this->id === Effect::SPEED or $this->id === Effect::SLOWNESS) { if ($entity instanceof Player) { $entity->setMovementSpeed(0.1); } } } if ($this->id === Effect::INVISIBILITY) { $entity->setDataFlag(Entity::DATA_FLAGS, Entity::DATA_FLAG_INVISIBLE, false); $entity->setDataProperty(Entity::DATA_SHOW_NAMETAG, Entity::DATA_TYPE_BYTE, 1); } }
public function applyEffect(Entity $entity) { switch ($this->id) { case Effect::POISON: if ($entity->getHealth() > 1) { $ev = new EntityDamageEvent($entity, EntityDamageEvent::CAUSE_MAGIC, 1); $entity->attack($ev->getFinalDamage(), $ev); } break; case Effect::WITHER: $ev = new EntityDamageEvent($entity, EntityDamageEvent::CAUSE_MAGIC, 1); $entity->attack($ev->getFinalDamage(), $ev); break; case Effect::REGENERATION: if ($entity->getHealth() < $entity->getMaxHealth()) { $ev = new EntityRegainHealthEvent($entity, 1, EntityRegainHealthEvent::CAUSE_MAGIC); $entity->heal($ev->getAmount(), $ev); } break; case Effect::HUNGER: if ($entity instanceof Player) { if ($entity->getFood() > 0) { if ($entity->getFood() - 0.025 * ($this->getAmplifier() + 1) > 0) { $entity->setFood($entity->getFood() - 0.025 * ($this->getAmplifier() + 1)); } else { $entity->setFood(0); } } } break; case Effect::SATURATION: if ($entity instanceof Player) { if ($entity->getFood() < 20) { if ($entity->getFood() + 1 * ($this->getAmplifier() + 1) > 20) { $entity->setFood(20); } else { $entity->setFood($entity->getFood() + 1 * ($this->getAmplifier() + 1)); } } } break; case Effect::SPEED: if ($entity instanceof Player) { $entity->setMovementSpeed(0.1 + ($this->amplifier + 1) * 0.01); } break; case Effect::SLOWNESS: if ($entity instanceof Player) { $entity->setMovementSpeed(0.1 - ($this->amplifier + 1) * 0.01); } break; } }