From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Jake Potrebic <jake.m.potrebic@gmail.com>
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 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
--- a/src/main/java/org/bukkit/Registry.java
+++ b/src/main/java/org/bukkit/Registry.java
@@ -0,0 +0,0 @@ public interface Registry<T extends Keyed> extends Iterable<T> {
      * @see GameEvent
      */
     Registry<GameEvent> GAME_EVENT = io.papermc.paper.registry.RegistryAccess.registryAccess().getRegistry(io.papermc.paper.registry.RegistryKey.GAME_EVENT); // Paper
+
+    // Paper start - potion effect type registry
+    /**
+     * Potion effect types.
+     *
+     * @see org.bukkit.potion.PotionEffectType
+     */
+    Registry<org.bukkit.potion.PotionEffectType> POTION_EFFECT_TYPE = EFFECT;
+    // Paper end - potion effect type registry
     /**
      * Get the object by its key.
      *
diff --git a/src/main/java/org/bukkit/potion/PotionEffectType.java b/src/main/java/org/bukkit/potion/PotionEffectType.java
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
--- a/src/main/java/org/bukkit/potion/PotionEffectType.java
+++ b/src/main/java/org/bukkit/potion/PotionEffectType.java
@@ -0,0 +0,0 @@ import org.jetbrains.annotations.Nullable;
 /**
  * Represents a type of potion and its effect on an entity.
  */
-public abstract class PotionEffectType implements Keyed, Translatable {
+public abstract class PotionEffectType implements Keyed, Translatable, net.kyori.adventure.translation.Translatable { // Paper - implement Translatable
     private static final BiMap<Integer, PotionEffectType> ID_MAP = HashBiMap.create();
 
     /**
@@ -0,0 +0,0 @@ public abstract class PotionEffectType implements Keyed, Translatable {
     public static PotionEffectType[] values() {
         return Lists.newArrayList(Registry.EFFECT).toArray(new PotionEffectType[0]);
     }
+
+    // Paper start
+    /**
+     * Gets the effect attributes in an immutable map.
+     *
+     * @return the attribute map
+     */
+    public abstract @NotNull java.util.Map<org.bukkit.attribute.Attribute, org.bukkit.attribute.AttributeModifier> 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 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
--- a/src/main/java/org/bukkit/potion/PotionEffectTypeWrapper.java
+++ b/src/main/java/org/bukkit/potion/PotionEffectTypeWrapper.java
@@ -0,0 +0,0 @@ public abstract class PotionEffectTypeWrapper extends PotionEffectType {
     public PotionEffectType getType() {
         return this;
     }
+
+    @Override
+    public boolean isInstant() {
+        return getType().isInstant();
+    }
+
+    @NotNull
+    @Override
+    public org.bukkit.Color getColor() {
+        return getType().getColor();
+    }
+    // Paper start
+    @Override
+    public @NotNull org.bukkit.NamespacedKey getKey() {
+        return this.getType().getKey();
+    }
+
+    @Override
+    public @NotNull java.util.Map<org.bukkit.attribute.Attribute, org.bukkit.attribute.AttributeModifier> 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
 }
