Paper/patches/api/0340-More-PotionEffectType-API.patch
Jake Potrebic bd38e0318a
Updated Upstream (Bukkit/CraftBukkit) (#10379)
Updated Upstream (Bukkit/CraftBukkit)

Upstream has released updates that appear to apply and compile correctly.
This update has not been tested by PaperMC and as with ANY update, please do your own testing

Bukkit Changes:
f02baa38 PR-988: Add World#getIntersectingChunks(BoundingBox)
9321d665 Move getItemInUse up to LivingEntity
819eef73 PR-959: Add access to current item's remaining ticks
c4fdadb0 SPIGOT-7601: Add AbstractArrow#getItem
be8261ca Add support for Java 22
26119676 PR-979: Add more translation keys
66753362 PR-985: Correct book maximum pages and characters per page documentation
c8be92fa PR-980: Improve getArmorContents() documentation
f1120ee2 PR-983: Expose riptide velocity to PlayerRiptideEvent

CraftBukkit Changes:
dfaa89bbe PR-1369: Add World#getIntersectingChunks(BoundingBox)
51bbab2b9 Move getItemInUse up to LivingEntity
668e09602 PR-1331: Add access to current item's remaining ticks
a639406d1 SPIGOT-7601: Add AbstractArrow#getItem
0398930fc SPIGOT-7602: Allow opening in-world horse and related inventories
ffd15611c SPIGOT-7608: Allow empty lists to morph to any PDT list
2188dcfa9 Add support for Java 22
45d6a609f SPIGOT-7604: Revert "SPIGOT-7365: DamageCause blocked by shield should trigger invulnerableTime"
06d915943 SPIGOT-7365: DamageCause blocked by shield should trigger invulnerableTime
ca3bc3707 PR-1361: Add more translation keys
366c3ca80 SPIGOT-7600: EntityChangeBlockEvent is not fired for frog eggs
06d0f9ba8 SPIGOT-7593: Fix sapling growth physics / client-side updates
45c2608e4 PR-1366: Expose riptide velocity to PlayerRiptideEvent
29b6bb79b SPIGOT-7587: Remove fixes for now-resolved MC-142590 and MC-109346
2024-04-06 12:53:39 -07:00

159 lines
5.8 KiB
Diff

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 4bc53793aade0887fa650a4bbf51d2e57678bd90..18c672f3855a329bf8f87a9de81b677e8e360b41 100644
--- a/src/main/java/org/bukkit/Registry.java
+++ b/src/main/java/org/bukkit/Registry.java
@@ -277,6 +277,31 @@ public interface Registry<T extends Keyed> extends Iterable<T> {
*/
@Deprecated(forRemoval = true)
Registry<io.papermc.paper.world.structure.ConfiguredStructure> CONFIGURED_STRUCTURE = Bukkit.getRegistry(io.papermc.paper.world.structure.ConfiguredStructure.class);
+
+ /**
+ * Potion effect types.
+ *
+ * @see org.bukkit.potion.PotionEffectType
+ */
+ Registry<org.bukkit.potion.PotionEffectType> POTION_EFFECT_TYPE = new Registry<org.bukkit.potion.PotionEffectType>() {
+
+ @Nullable
+ @Override
+ public org.bukkit.potion.PotionEffectType get(@NotNull NamespacedKey key) {
+ return org.bukkit.potion.PotionEffectType.getByKey(key);
+ }
+
+ @NotNull
+ @Override
+ public Iterator<org.bukkit.potion.PotionEffectType> iterator() {
+ return java.util.Arrays.stream(org.bukkit.potion.PotionEffectType.values()).iterator();
+ }
+
+ @Override
+ public @NotNull Stream<org.bukkit.potion.PotionEffectType> 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 f97dff2fd90cc8c35cbde04d1ace81320a8e4658..7d2f2fb6d4a786d15d61fde2ef03783b85d0c47b 100644
--- a/src/main/java/org/bukkit/potion/PotionEffectType.java
+++ b/src/main/java/org/bukkit/potion/PotionEffectType.java
@@ -16,7 +16,7 @@ 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();
/**
@@ -352,4 +352,56 @@ public abstract class PotionEffectType implements Keyed, Translatable {
return from;
}
+ // 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 a613debb03f6440583f57dd1adb7bb1bebbd636b..718f216c9153a5f03b91ce1de9ee9574e867e32b 100644
--- a/src/main/java/org/bukkit/potion/PotionEffectTypeWrapper.java
+++ b/src/main/java/org/bukkit/potion/PotionEffectTypeWrapper.java
@@ -19,4 +19,41 @@ 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
}