From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Jake Potrebic Date: Thu, 27 May 2021 21:58:33 -0700 Subject: [PATCH] More PotionEffectType API diff --git a/src/main/java/org/bukkit/Registry.java b/src/main/java/org/bukkit/Registry.java index 4efda6d0f81ac192890b5003ceebf3d8fd07ea08..44d863510d454f316a5d9b7214b54ca499226d74 100644 --- a/src/main/java/org/bukkit/Registry.java +++ b/src/main/java/org/bukkit/Registry.java @@ -257,6 +257,31 @@ public interface Registry extends Iterable { */ @Deprecated(forRemoval = true) Registry CONFIGURED_STRUCTURE = Bukkit.getRegistry(io.papermc.paper.world.structure.ConfiguredStructure.class); + + /** + * Potion effect types. + * + * @see org.bukkit.potion.PotionEffectType + */ + Registry POTION_EFFECT_TYPE = new Registry() { + + @Nullable + @Override + public org.bukkit.potion.PotionEffectType get(@NotNull NamespacedKey key) { + return org.bukkit.potion.PotionEffectType.getByKey(key); + } + + @NotNull + @Override + public Iterator iterator() { + return Arrays.stream(org.bukkit.potion.PotionEffectType.values()).iterator(); + } + + @Override + public @NotNull Stream stream() { + return StreamSupport.stream(this.spliterator(), false); + } + }; // Paper end /** diff --git a/src/main/java/org/bukkit/potion/PotionEffectType.java b/src/main/java/org/bukkit/potion/PotionEffectType.java index 5f3aa6fd18d57055a6d8494938dff149d51b2803..84fd181ad897f620e450750246d9ea416dcbd48a 100644 --- a/src/main/java/org/bukkit/potion/PotionEffectType.java +++ b/src/main/java/org/bukkit/potion/PotionEffectType.java @@ -14,7 +14,7 @@ import org.jetbrains.annotations.Nullable; /** * Represents a type of potion and its effect on an entity. */ -public abstract class PotionEffectType implements Keyed { +public abstract class PotionEffectType implements Keyed, net.kyori.adventure.translation.Translatable { // Paper - implement Translatable /** * Increases movement speed. */ @@ -363,4 +363,56 @@ public abstract class PotionEffectType implements Keyed { public static PotionEffectType[] values() { return Arrays.copyOfRange(byId, 1, byId.length); } + // Paper start + /** + * Gets the effect attributes in an immutable map. + * + * @return the attribute map + */ + public abstract @NotNull Map getEffectAttributes(); + + /** + * Gets the true modifier amount based on the effect amplifier. + * + * @param attribute the attribute + * @param effectAmplifier the effect amplifier (0 indexed) + * @return the modifier amount + * @throws IllegalArgumentException if the supplied attribute is not present in the map from {@link #getEffectAttributes()} + */ + public abstract double getAttributeModifierAmount(@NotNull org.bukkit.attribute.Attribute attribute, int effectAmplifier); + + /** + * Gets the category of this effect + * + * @return the category + */ + public abstract @NotNull PotionEffectType.Category getEffectCategory(); + + /** + * Category of {@link PotionEffectType}s + */ + public enum Category { + + BENEFICIAL(net.kyori.adventure.text.format.NamedTextColor.BLUE), + HARMFUL(net.kyori.adventure.text.format.NamedTextColor.RED), + NEUTRAL(net.kyori.adventure.text.format.NamedTextColor.BLUE); + + private final net.kyori.adventure.text.format.TextColor color; + + Category(net.kyori.adventure.text.format.TextColor color) { + this.color = color; + } + + /** + * Gets the text color used when displaying potions + * of this category. + * + * @return the text color + */ + @NotNull + public net.kyori.adventure.text.format.TextColor getColor() { + return color; + } + } + // Paper end } diff --git a/src/main/java/org/bukkit/potion/PotionEffectTypeWrapper.java b/src/main/java/org/bukkit/potion/PotionEffectTypeWrapper.java index 6994981bdeccc4b059ae0075d0c8a26b6471d7b3..928f36a4def378dccb6a52196ad60e7b5ff17694 100644 --- a/src/main/java/org/bukkit/potion/PotionEffectTypeWrapper.java +++ b/src/main/java/org/bukkit/potion/PotionEffectTypeWrapper.java @@ -27,7 +27,7 @@ public class PotionEffectTypeWrapper extends PotionEffectType { */ @NotNull public PotionEffectType getType() { - return PotionEffectType.getByKey(getKey()); + return PotionEffectType.getByKey(super.getKey()); // Paper } @Override @@ -40,4 +40,30 @@ public class PotionEffectTypeWrapper extends PotionEffectType { public Color getColor() { return getType().getColor(); } + // Paper start + @Override + public @NotNull org.bukkit.NamespacedKey getKey() { + return this.getType().getKey(); + } + + @Override + public @NotNull java.util.Map getEffectAttributes() { + return this.getType().getEffectAttributes(); + } + + @Override + public double getAttributeModifierAmount(@NotNull org.bukkit.attribute.Attribute attribute, int effectAmplifier) { + return this.getType().getAttributeModifierAmount(attribute, effectAmplifier); + } + + @Override + public @NotNull PotionEffectType.Category getEffectCategory() { + return this.getType().getEffectCategory(); + } + + @Override + public @NotNull String translationKey() { + return this.getType().translationKey(); + } + // Paper end }