mirror of
https://github.com/pmmp/PocketMine-MP.git
synced 2025-06-13 23:15:29 +00:00
Improved Absorption, now only applies to living entities, now controllable by plugins
This commit is contained in:
parent
aa9fd1b4f9
commit
cb7911ee9c
@ -892,21 +892,7 @@ abstract class Entity extends Location implements Metadatable{
|
|||||||
|
|
||||||
$this->setLastDamageCause($source);
|
$this->setLastDamageCause($source);
|
||||||
|
|
||||||
$damage = $source->getFinalDamage();
|
$this->setHealth($this->getHealth() - $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);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -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
|
* @param EntityDamageEvent $type
|
||||||
*/
|
*/
|
||||||
|
@ -342,8 +342,10 @@ abstract class Living extends Entity implements Damageable{
|
|||||||
$source->setCancelled();
|
$source->setCancelled();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$source->setDamage(-min($this->getAbsorption(), $source->getFinalDamage()), EntityDamageEvent::MODIFIER_ABSORPTION);
|
||||||
|
|
||||||
if($this->hasEffect(Effect::DAMAGE_RESISTANCE)){
|
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);
|
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 = new EntityEventPacket();
|
||||||
$pk->entityRuntimeId = $this->getId();
|
$pk->entityRuntimeId = $this->getId();
|
||||||
$pk->event = $this->getHealth() <= 0 ? EntityEventPacket::DEATH_ANIMATION : EntityEventPacket::HURT_ANIMATION; //Ouch!
|
$pk->event = $this->getHealth() <= 0 ? EntityEventPacket::DEATH_ANIMATION : EntityEventPacket::HURT_ANIMATION; //Ouch!
|
||||||
|
@ -37,6 +37,7 @@ class EntityDamageEvent extends EntityEvent implements Cancellable{
|
|||||||
const MODIFIER_STRENGTH = 2;
|
const MODIFIER_STRENGTH = 2;
|
||||||
const MODIFIER_WEAKNESS = 3;
|
const MODIFIER_WEAKNESS = 3;
|
||||||
const MODIFIER_RESISTANCE = 4;
|
const MODIFIER_RESISTANCE = 4;
|
||||||
|
const MODIFIER_ABSORPTION = 5;
|
||||||
|
|
||||||
const CAUSE_CONTACT = 0;
|
const CAUSE_CONTACT = 0;
|
||||||
const CAUSE_ENTITY_ATTACK = 1;
|
const CAUSE_ENTITY_ATTACK = 1;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user