public function onConsume(Entity $human) { $pk = new EntityEventPacket(); $pk->eid = $human->getId(); $pk->event = EntityEventPacket::USE_ITEM; if ($human instanceof Player) { $human->dataPacket($pk); } Server::broadcastPacket($human->getViewers(), $pk); $ev = new EntityEatItemEvent($human, $this); $human->addSaturation($ev->getSaturationRestore()); $human->addFood($ev->getFoodRestore()); foreach ($ev->getAdditionalEffects() as $effect) { $human->addEffect($effect); } $human->getInventory()->setItemInHand($ev->getResidue()); }
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 Human) { $entity->exhaust(0.5 * $this->amplifier, PlayerExhaustEvent::CAUSE_POTION); } break; case Effect::HEALING: $level = $this->amplifier + 1; if ($entity->getHealth() + 4 * $level <= $entity->getMaxHealth()) { $ev = new EntityRegainHealthEvent($entity, 4 * $level, EntityRegainHealthEvent::CAUSE_MAGIC); $entity->heal($ev->getAmount(), $ev); } else { $ev = new EntityRegainHealthEvent($entity, $entity->getMaxHealth() - $entity->getHealth(), EntityRegainHealthEvent::CAUSE_MAGIC); $entity->heal($ev->getAmount(), $ev); } break; case Effect::HARMING: $level = $this->amplifier + 1; if ($entity->getHealth() - 6 * $level >= 0) { $ev = new EntityDamageEvent($entity, EntityDamageEvent::CAUSE_MAGIC, 6 * $level); $entity->attack($ev->getFinalDamage(), $ev); } else { $ev = new EntityDamageEvent($entity, EntityDamageEvent::CAUSE_MAGIC, $entity->getHealth()); $entity->attack($ev->getFinalDamage(), $ev); } break; case Effect::SATURATION: if ($entity instanceof Player) { $entity->addFood(1); } break; } }