-
-
Notifications
You must be signed in to change notification settings - Fork 2.4k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
326c687
commit ae4d7f2
Showing
4 changed files
with
99 additions
and
1 deletion.
There are no files selected for viewing
75 changes: 75 additions & 0 deletions
75
paper-api/src/main/java/io/papermc/paper/event/entity/EntityPotionTickEvent.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,75 @@ | ||
package io.papermc.paper.event.entity; | ||
|
||
import org.bukkit.entity.LivingEntity; | ||
import org.bukkit.event.Cancellable; | ||
import org.bukkit.event.HandlerList; | ||
import org.bukkit.event.entity.EntityEvent; | ||
import org.bukkit.potion.PotionEffectType; | ||
import org.jetbrains.annotations.ApiStatus; | ||
import org.jspecify.annotations.NullMarked; | ||
|
||
/** | ||
* An event that is triggered when an entity receives a potion effect instantly | ||
* or when the potion effect is applied on each tick (e.g. every 25 ticks for Poison level 1). | ||
* <p> | ||
* For example, this event may be called when an entity regenerates health | ||
* or takes poison damage as a result of a potion effect. | ||
*/ | ||
@NullMarked | ||
public class EntityPotionTickEvent extends EntityEvent implements Cancellable { | ||
|
||
private static final HandlerList HANDLER_LIST = new HandlerList(); | ||
|
||
private final PotionEffectType type; | ||
private final int amplifier; | ||
private boolean cancelled; | ||
|
||
@ApiStatus.Internal | ||
public EntityPotionTickEvent(final LivingEntity entity, final PotionEffectType type, final int amplifier) { | ||
super(entity); | ||
this.type = type; | ||
this.amplifier = amplifier; | ||
} | ||
|
||
@Override | ||
public LivingEntity getEntity() { | ||
return (LivingEntity) super.getEntity(); | ||
} | ||
|
||
/** | ||
* Gets the type of the potion effect associated with this event. | ||
* | ||
* @return the {@link PotionEffectType} of the effect | ||
*/ | ||
public PotionEffectType getType() { | ||
return type; | ||
} | ||
|
||
/** | ||
* Gets the amplifier level of the potion effect associated with this event. | ||
* | ||
* @return the amplifier level of the potion effect | ||
*/ | ||
public int getAmplifier() { | ||
return amplifier; | ||
} | ||
|
||
@Override | ||
public boolean isCancelled() { | ||
return this.cancelled; | ||
} | ||
|
||
@Override | ||
public void setCancelled(final boolean cancel) { | ||
this.cancelled = cancel; | ||
} | ||
|
||
@Override | ||
public HandlerList getHandlers() { | ||
return HANDLER_LIST; | ||
} | ||
|
||
public static HandlerList getHandlerList() { | ||
return HANDLER_LIST; | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
10 changes: 10 additions & 0 deletions
10
paper-server/patches/sources/net/minecraft/world/effect/MobEffect.java.patch
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
--- a/net/minecraft/world/effect/MobEffect.java | ||
+++ b/net/minecraft/world/effect/MobEffect.java | ||
@@ -76,6 +_,7 @@ | ||
public void applyInstantenousEffect( | ||
ServerLevel level, @Nullable Entity source, @Nullable Entity indirectSource, LivingEntity entity, int amplifier, double health | ||
) { | ||
+ if (!new io.papermc.paper.event.entity.EntityPotionTickEvent(entity.getBukkitLivingEntity(), org.bukkit.craftbukkit.potion.CraftPotionEffectType.minecraftToBukkit(this), amplifier).callEvent()) { return; } // Paper - Add EntityPotionTickEvent | ||
this.applyEffectTick(level, entity, amplifier); | ||
} | ||
|
10 changes: 10 additions & 0 deletions
10
paper-server/patches/sources/net/minecraft/world/effect/MobEffectInstance.java.patch
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
--- a/net/minecraft/world/effect/MobEffectInstance.java | ||
+++ b/net/minecraft/world/effect/MobEffectInstance.java | ||
@@ -216,6 +_,7 @@ | ||
int i = this.isInfiniteDuration() ? entity.tickCount : this.duration; | ||
if (entity.level() instanceof ServerLevel serverLevel | ||
&& this.effect.value().shouldApplyEffectTickThisTick(i, this.amplifier) | ||
+ && new io.papermc.paper.event.entity.EntityPotionTickEvent(entity.getBukkitLivingEntity(), org.bukkit.craftbukkit.potion.CraftPotionEffectType.minecraftHolderToBukkit(this.effect), this.amplifier).callEvent() // Paper - Add EntityPotionTickEvent | ||
&& !this.effect.value().applyEffectTick(serverLevel, entity, this.amplifier)) { | ||
entity.removeEffect(this.effect); | ||
} |