Paper/patches/api/0355-Add-enchantWithLevels-...

63 lines
3.3 KiB
Diff

From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Jason Penilla <11360596+jpenilla@users.noreply.github.com>
Date: Wed, 16 Mar 2022 20:35:13 -0700
Subject: [PATCH] Add enchantWithLevels API
diff --git a/src/main/java/org/bukkit/inventory/ItemFactory.java b/src/main/java/org/bukkit/inventory/ItemFactory.java
index 9045746aa3077c536173d4ac826e0bf49e732b32..1c4e0c7356047163a38f5ac4dd544129d0b36271 100644
--- a/src/main/java/org/bukkit/inventory/ItemFactory.java
+++ b/src/main/java/org/bukkit/inventory/ItemFactory.java
@@ -174,6 +174,22 @@ public interface ItemFactory {
Material getSpawnEgg(@NotNull EntityType type);
// Paper start - Adventure
+ /**
+ * Randomly enchants a copy of the provided {@link ItemStack} using the given experience levels.
+ *
+ * <p>If the provided ItemStack is already enchanted, the existing enchants will be removed before enchanting.</p>
+ *
+ * <p>Levels must be in range {@code [1, 30]}.</p>
+ *
+ * @param itemStack ItemStack to enchant
+ * @param levels levels to use for enchanting
+ * @param allowTreasure whether to allow enchantments where {@link org.bukkit.enchantments.Enchantment#isTreasure()} returns true
+ * @param random {@link java.util.Random} instance to use for enchanting
+ * @return enchanted copy of the provided ItemStack
+ * @throws IllegalArgumentException on bad arguments
+ */
+ @NotNull ItemStack enchantWithLevels(@NotNull ItemStack itemStack, @org.jetbrains.annotations.Range(from = 1, to = 30) int levels, boolean allowTreasure, @NotNull java.util.Random random);
+
/**
* Creates a hover event for the given item.
*
diff --git a/src/main/java/org/bukkit/inventory/ItemStack.java b/src/main/java/org/bukkit/inventory/ItemStack.java
index f9faef1b73b5027a3d22e76a0b33b7c952f3ae08..eac7adf622b91489711a2f8bcff77fb31292dd67 100644
--- a/src/main/java/org/bukkit/inventory/ItemStack.java
+++ b/src/main/java/org/bukkit/inventory/ItemStack.java
@@ -656,6 +656,24 @@ public class ItemStack implements Cloneable, ConfigurationSerializable, Translat
}
// Paper start
+ /**
+ * Randomly enchants a copy of this {@link ItemStack} using the given experience levels.
+ *
+ * <p>If this ItemStack is already enchanted, the existing enchants will be removed before enchanting.</p>
+ *
+ * <p>Levels must be in range {@code [1, 30]}.</p>
+ *
+ * @param levels levels to use for enchanting
+ * @param allowTreasure whether to allow enchantments where {@link org.bukkit.enchantments.Enchantment#isTreasure()} returns true
+ * @param random {@link java.util.Random} instance to use for enchanting
+ * @return enchanted copy of the provided ItemStack
+ * @throws IllegalArgumentException on bad arguments
+ */
+ @NotNull
+ public ItemStack enchantWithLevels(final @org.jetbrains.annotations.Range(from = 1, to = 30) int levels, final boolean allowTreasure, final @NotNull java.util.Random random) {
+ return Bukkit.getServer().getItemFactory().enchantWithLevels(this, levels, allowTreasure, random);
+ }
+
@NotNull
@Override
public net.kyori.adventure.text.event.HoverEvent<net.kyori.adventure.text.event.HoverEvent.ShowItem> asHoverEvent(final @NotNull java.util.function.UnaryOperator<net.kyori.adventure.text.event.HoverEvent.ShowItem> op) {