#824: Expand upon PotionEffect API to better accommodate infinite durations

By: Parker Hawke <hawkeboyz2@hotmail.com>
This commit is contained in:
Bukkit/Spigot 2023-03-20 10:01:28 +11:00
parent d68d5105ce
commit b1268227d9

View file

@ -20,6 +20,11 @@ import org.jetbrains.annotations.Nullable;
*/
@SerializableAs("PotionEffect")
public class PotionEffect implements ConfigurationSerializable {
/**
* A constant denoting infinite potion duration.
*/
public static final int INFINITE_DURATION = -1;
private static final String AMPLIFIER = "amplifier";
private static final String DURATION = "duration";
private static final String TYPE = "effect";
@ -179,12 +184,40 @@ public class PotionEffect implements ConfigurationSerializable {
* Returns the duration (in ticks) that this effect will run for when
* applied to a {@link LivingEntity}.
*
* @return The duration of the effect
* @return The duration of the effect, or {@value #INFINITE_DURATION} if
* this effect is infinite
* @see #isInfinite()
*/
public int getDuration() {
return duration;
}
/**
* Returns whether or not this potion effect has an infinite duration. Potion
* effects with infinite durations will display an infinite symbol and never
* expire unless manually removed.
*
* @return whether this duration is infinite or not
*/
public boolean isInfinite() {
return duration == INFINITE_DURATION;
}
/**
* Returns whether or not this potion effect has a shorter duration than the
* provided potion effect.
* <p>
* An infinite duration is considered longer than non-infinite durations. If
* both potion effects have infinite durations, then neither is shorter than
* the other and this method will return false.
*
* @param other the other effect
* @return true if this effect is shorter than the other, false if longer or equal
*/
public boolean isShorterThan(@NotNull PotionEffect other) {
return !isInfinite() && (duration < other.duration || other.isInfinite());
}
/**
* Returns the {@link PotionEffectType} of this effect.
*