Improved Absorption, now only applies to living entities, now controllable by plugins

This commit is contained in:
Dylan K. Taylor 2017-04-30 19:29:10 +01:00
parent aa9fd1b4f9
commit cb7911ee9c
3 changed files with 7 additions and 24 deletions

View File

@ -892,21 +892,7 @@ abstract class Entity extends Location implements Metadatable{
$this->setLastDamageCause($source);
$damage = $source->getFinalDamage();
$absorption = $this->getAbsorption();
if($absorption > 0){
if($absorption > $damage){
//Use absorption health before normal health.
$this->setAbsorption($absorption - $damage);
$damage = 0;
}else{
$this->setAbsorption(0);
$damage -= $absorption;
}
}
$this->setHealth($this->getHealth() - $damage);
$this->setHealth($this->getHealth() - $source->getFinalDamage());
}
/**
@ -953,14 +939,6 @@ abstract class Entity extends Location implements Metadatable{
}
}
public function getAbsorption() : float{
return 0;
}
public function setAbsorption(float $absorption){
}
/**
* @param EntityDamageEvent $type
*/

View File

@ -342,8 +342,10 @@ abstract class Living extends Entity implements Damageable{
$source->setCancelled();
}
$source->setDamage(-min($this->getAbsorption(), $source->getFinalDamage()), EntityDamageEvent::MODIFIER_ABSORPTION);
if($this->hasEffect(Effect::DAMAGE_RESISTANCE)){
$source->setDamage(-($source->getDamage(EntityDamageEvent::MODIFIER_BASE) * 0.20 * $this->getEffect(Effect::DAMAGE_RESISTANCE)->getEffectLevel()), EntityDamageEvent::MODIFIER_RESISTANCE);
$source->setDamage(-($source->getFinalDamage() * 0.20 * $this->getEffect(Effect::DAMAGE_RESISTANCE)->getEffectLevel()), EntityDamageEvent::MODIFIER_RESISTANCE);
}
parent::attack($source);
@ -369,6 +371,8 @@ abstract class Living extends Entity implements Damageable{
}
}
$this->setAbsorption(max(0, $this->getAbsorption() + $source->getDamage(EntityDamageEvent::MODIFIER_ABSORPTION)));
$pk = new EntityEventPacket();
$pk->entityRuntimeId = $this->getId();
$pk->event = $this->getHealth() <= 0 ? EntityEventPacket::DEATH_ANIMATION : EntityEventPacket::HURT_ANIMATION; //Ouch!

View File

@ -37,6 +37,7 @@ class EntityDamageEvent extends EntityEvent implements Cancellable{
const MODIFIER_STRENGTH = 2;
const MODIFIER_WEAKNESS = 3;
const MODIFIER_RESISTANCE = 4;
const MODIFIER_ABSORPTION = 5;
const CAUSE_CONTACT = 0;
const CAUSE_ENTITY_ATTACK = 1;