Paper/patches/api/0344-More-PotionEffectType-API.patch
Jake Potrebic 773dd72446
Updated Upstream (Bukkit/CraftBukkit) (#9739)
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:
69c7ce23 PR-990: Use Mockito instead of InvocationHandler for test mocking
997de31d PR-893: Add a stream method to Registry to make it easier to use and to avoid unnecessary wrapping
6a8ce581 Fix malformed javadoc in previous commit
26c74f6d PR-890: Add more Sculk API (bloom, shriek, bloom event)
aa067abf PR-895: Load GameEvent and MusicInstrument from registry

CraftBukkit Changes:
78796c9de Add support for Java 21
ddc9a2dad SPIGOT-7475: Don't fire SculkBloomEvent during world generation
caee2311a PR-1245: Add a stream method to Registry to make it easier to use and to avoid unnecessary wrapping
de421cf56 PR-1242: Add more Sculk API (bloom, shriek, bloom event)
00f5a80fb PR-1252: Fix error when generating a tree in water
10219df3a PR-1248: Load GameEvent and MusicInstrument from registry
2023-09-21 18:48:55 +02:00

148 lines
5.6 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 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<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 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 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<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 c3a86bb1910158a8d13a675dfa7236dd6a3f397c..a7653806c0fa76f4b3342ea199fe892c514a4c27 100644
--- a/src/main/java/org/bukkit/potion/PotionEffectTypeWrapper.java
+++ b/src/main/java/org/bukkit/potion/PotionEffectTypeWrapper.java
@@ -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<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
}