Instant Damage splash potions now deal knockback

This commit is contained in:
Dylan K. Taylor 2018-03-09 12:52:09 +00:00
parent a9957c3db3
commit 74cff89df3
2 changed files with 16 additions and 3 deletions

View File

@ -23,6 +23,8 @@ declare(strict_types=1);
namespace pocketmine\entity;
use pocketmine\event\entity\EntityDamageByChildEntityEvent;
use pocketmine\event\entity\EntityDamageByEntityEvent;
use pocketmine\event\entity\EntityDamageEvent;
use pocketmine\event\entity\EntityRegainHealthEvent;
use pocketmine\event\player\PlayerExhaustEvent;
@ -245,8 +247,10 @@ class Effect{
* @param Living $entity
* @param EffectInstance $instance
* @param float $potency
* @param null|Entity $source
* @param null|Entity $sourceOwner
*/
public function applyEffect(Living $entity, EffectInstance $instance, float $potency = 1.0) : void{
public function applyEffect(Living $entity, EffectInstance $instance, float $potency = 1.0, ?Entity $source = null, ?Entity $sourceOwner = null) : void{
switch($this->id){
/** @noinspection PhpMissingBreakStatementInspection */
case Effect::POISON:
@ -283,7 +287,16 @@ class Effect{
break;
case Effect::INSTANT_DAMAGE:
//TODO: add particles (witch spell)
$entity->attack(new EntityDamageEvent($entity, EntityDamageEvent::CAUSE_MAGIC, (4 << $instance->getAmplifier()) * $potency));
$damage = (4 << $instance->getAmplifier()) * $potency;
if($source !== null and $sourceOwner !== null){
$ev = new EntityDamageByChildEntityEvent($sourceOwner, $source, $entity, EntityDamageEvent::CAUSE_MAGIC, $damage);
}elseif($source !== null){
$ev = new EntityDamageByEntityEvent($source, $entity, EntityDamageEvent::CAUSE_MAGIC, $damage);
}else{
$ev = new EntityDamageEvent($entity, EntityDamageEvent::CAUSE_MAGIC, $damage);
}
$entity->attack($ev);
break;
case Effect::SATURATION:
if($entity instanceof Human){

View File

@ -104,7 +104,7 @@ class SplashPotion extends Throwable{
$effect->setDuration($newDuration);
$entity->addEffect($effect);
}else{
$effect->getType()->applyEffect($entity, $effect, $distanceMultiplier);
$effect->getType()->applyEffect($entity, $effect, $distanceMultiplier, $this, $this->getOwningEntity());
}
}
}