mirror of
https://github.com/pmmp/PocketMine-MP.git
synced 2025-06-07 04:17:07 +00:00
parent
c301788864
commit
5a0afa9f88
@ -24,8 +24,6 @@ declare(strict_types=1);
|
|||||||
namespace pocketmine\entity;
|
namespace pocketmine\entity;
|
||||||
|
|
||||||
use pocketmine\event\entity\EntityDamageEvent;
|
use pocketmine\event\entity\EntityDamageEvent;
|
||||||
use pocketmine\event\entity\EntityEffectAddEvent;
|
|
||||||
use pocketmine\event\entity\EntityEffectRemoveEvent;
|
|
||||||
use pocketmine\event\entity\EntityRegainHealthEvent;
|
use pocketmine\event\entity\EntityRegainHealthEvent;
|
||||||
use pocketmine\event\player\PlayerExhaustEvent;
|
use pocketmine\event\player\PlayerExhaustEvent;
|
||||||
use pocketmine\network\mcpe\protocol\MobEffectPacket;
|
use pocketmine\network\mcpe\protocol\MobEffectPacket;
|
||||||
@ -399,10 +397,6 @@ class Effect{
|
|||||||
* @param Effect|null $oldEffect
|
* @param Effect|null $oldEffect
|
||||||
*/
|
*/
|
||||||
public function add(Entity $entity, Effect $oldEffect = null){
|
public function add(Entity $entity, Effect $oldEffect = null){
|
||||||
$entity->getLevel()->getServer()->getPluginManager()->callEvent($ev = new EntityEffectAddEvent($entity, $this, $oldEffect));
|
|
||||||
if($ev->isCancelled()){
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if($entity instanceof Player){
|
if($entity instanceof Player){
|
||||||
$pk = new MobEffectPacket();
|
$pk = new MobEffectPacket();
|
||||||
$pk->entityRuntimeId = $entity->getId();
|
$pk->entityRuntimeId = $entity->getId();
|
||||||
@ -457,11 +451,6 @@ class Effect{
|
|||||||
* @param bool $send
|
* @param bool $send
|
||||||
*/
|
*/
|
||||||
public function remove(Entity $entity, bool $send = true){
|
public function remove(Entity $entity, bool $send = true){
|
||||||
$entity->getLevel()->getServer()->getPluginManager()->callEvent($ev = new EntityEffectRemoveEvent($entity, $this));
|
|
||||||
if($ev->isCancelled()){
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if($send and $entity instanceof Player){
|
if($send and $entity instanceof Player){
|
||||||
$pk = new MobEffectPacket();
|
$pk = new MobEffectPacket();
|
||||||
$pk->entityRuntimeId = $entity->getId();
|
$pk->entityRuntimeId = $entity->getId();
|
||||||
|
@ -28,6 +28,8 @@ use pocketmine\event\entity\EntityDamageByChildEntityEvent;
|
|||||||
use pocketmine\event\entity\EntityDamageByEntityEvent;
|
use pocketmine\event\entity\EntityDamageByEntityEvent;
|
||||||
use pocketmine\event\entity\EntityDamageEvent;
|
use pocketmine\event\entity\EntityDamageEvent;
|
||||||
use pocketmine\event\entity\EntityDeathEvent;
|
use pocketmine\event\entity\EntityDeathEvent;
|
||||||
|
use pocketmine\event\entity\EntityEffectAddEvent;
|
||||||
|
use pocketmine\event\entity\EntityEffectRemoveEvent;
|
||||||
use pocketmine\event\entity\EntityRegainHealthEvent;
|
use pocketmine\event\entity\EntityRegainHealthEvent;
|
||||||
use pocketmine\event\Timings;
|
use pocketmine\event\Timings;
|
||||||
use pocketmine\item\Item as ItemItem;
|
use pocketmine\item\Item as ItemItem;
|
||||||
@ -197,6 +199,11 @@ abstract class Living extends Entity implements Damageable{
|
|||||||
public function removeEffect(int $effectId){
|
public function removeEffect(int $effectId){
|
||||||
if(isset($this->effects[$effectId])){
|
if(isset($this->effects[$effectId])){
|
||||||
$effect = $this->effects[$effectId];
|
$effect = $this->effects[$effectId];
|
||||||
|
$this->server->getPluginManager()->callEvent($ev = new EntityEffectRemoveEvent($this, $effect));
|
||||||
|
if($ev->isCancelled()){
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
unset($this->effects[$effectId]);
|
unset($this->effects[$effectId]);
|
||||||
$effect->remove($this);
|
$effect->remove($this);
|
||||||
|
|
||||||
@ -237,19 +244,28 @@ abstract class Living extends Entity implements Damageable{
|
|||||||
* @return bool whether the effect has been successfully applied.
|
* @return bool whether the effect has been successfully applied.
|
||||||
*/
|
*/
|
||||||
public function addEffect(Effect $effect) : bool{
|
public function addEffect(Effect $effect) : bool{
|
||||||
|
$oldEffect = null;
|
||||||
|
$cancelled = false;
|
||||||
|
|
||||||
if(isset($this->effects[$effect->getId()])){
|
if(isset($this->effects[$effect->getId()])){
|
||||||
$oldEffect = $this->effects[$effect->getId()];
|
$oldEffect = $this->effects[$effect->getId()];
|
||||||
if(
|
if(
|
||||||
abs($effect->getAmplifier()) < $oldEffect->getAmplifier()
|
abs($effect->getAmplifier()) < $oldEffect->getAmplifier()
|
||||||
or (abs($effect->getAmplifier()) === abs($oldEffect->getAmplifier()) and $effect->getDuration() < $oldEffect->getDuration())
|
or (abs($effect->getAmplifier()) === abs($oldEffect->getAmplifier()) and $effect->getDuration() < $oldEffect->getDuration())
|
||||||
){
|
){
|
||||||
return false;
|
$cancelled = true;
|
||||||
}
|
}
|
||||||
$effect->add($this, $oldEffect);
|
|
||||||
}else{
|
|
||||||
$effect->add($this);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$ev = new EntityEffectAddEvent($this, $effect, $oldEffect);
|
||||||
|
$ev->setCancelled($cancelled);
|
||||||
|
|
||||||
|
$this->server->getPluginManager()->callEvent($ev);
|
||||||
|
if($ev->isCancelled()){
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
$effect->add($this, $oldEffect);
|
||||||
$this->effects[$effect->getId()] = $effect;
|
$this->effects[$effect->getId()] = $effect;
|
||||||
|
|
||||||
$this->recalculateEffectColor();
|
$this->recalculateEffectColor();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user