aboutsummaryrefslogtreecommitdiffhomepage
path: root/patches/api/0273-More-Enchantment-API.patch
blob: 810ee1b78a33636457964fb727c89844e8f0495c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Jake Potrebic <jake.m.potrebic@gmail.com>
Date: Thu, 6 May 2021 19:58:03 -0700
Subject: [PATCH] More Enchantment API

Co-authored-by: Luis <luisc99@icloud.com>
Co-authored-by: Janet Blackquill <uhhadd@gmail.com>

diff --git a/src/main/java/io/papermc/paper/enchantments/EnchantmentRarity.java b/src/main/java/io/papermc/paper/enchantments/EnchantmentRarity.java
new file mode 100644
index 0000000000000000000000000000000000000000..aec3b41d7c3388e26fa203e3c062f1e6a6d0ba41
--- /dev/null
+++ b/src/main/java/io/papermc/paper/enchantments/EnchantmentRarity.java
@@ -0,0 +1,28 @@
+package io.papermc.paper.enchantments;
+
+/**
+ * @deprecated Enchantments do not have a "rarity" since 1.20.5
+ */
+@Deprecated(forRemoval = true, since = "1.20.5")
+public enum EnchantmentRarity {
+
+    COMMON(10),
+    UNCOMMON(5),
+    RARE(2),
+    VERY_RARE(1);
+
+    private final int weight;
+
+    EnchantmentRarity(int weight) {
+        this.weight = weight;
+    }
+
+    /**
+     * Gets the weight for the rarity.
+     *
+     * @return the weight
+     */
+    public int getWeight() {
+        return weight;
+    }
+}
diff --git a/src/main/java/org/bukkit/enchantments/Enchantment.java b/src/main/java/org/bukkit/enchantments/Enchantment.java
index 72251952e771152016e32a3fe8bd06ec47c8ee6c..fa20a0f13bb91955e2928b46c99ddaf0c4418d15 100644
--- a/src/main/java/org/bukkit/enchantments/Enchantment.java
+++ b/src/main/java/org/bukkit/enchantments/Enchantment.java
@@ -284,11 +284,7 @@ public abstract class Enchantment implements Keyed, Translatable, net.kyori.adve
      * Cursed enchantments are found the same way treasure enchantments are
      *
      * @return true if the enchantment is cursed
-     * @deprecated cursed enchantments are no longer special. Will return true
-     * only for {@link Enchantment#BINDING_CURSE} and
-     * {@link Enchantment#VANISHING_CURSE}.
      */
-    @Deprecated(since = "1.13")
     public abstract boolean isCursed();
 
     /**
@@ -324,6 +320,118 @@ public abstract class Enchantment implements Keyed, Translatable, net.kyori.adve
     public abstract net.kyori.adventure.text.@NotNull Component displayName(int level);
     // Paper end
 
+    // Paper start - more Enchantment API
+    /**
+     * Checks if this enchantment can be found in villager trades.
+     *
+     * @return true if the enchantment can be found in trades
+     */
+    public abstract boolean isTradeable();
+
+    /**
+     * Checks if this enchantment can be found in an enchanting table
+     * or use to enchant items generated by loot tables.
+     *
+     * @return true if the enchantment can be found in a table or by loot tables
+     */
+    public abstract boolean isDiscoverable();
+
+    /**
+     * Gets the minimum modified cost of this enchantment at a specific level.
+     * <p>
+     * Note this is not the number of experience levels needed, and does not directly translate to the levels shown in an enchanting table.
+     * This value is used in combination with factors such as tool enchantability to determine a final cost.
+     * See <a href="https://minecraft.wiki/w/Enchanting/Levels">https://minecraft.wiki/w/Enchanting/Levels</a> for more information.
+     * </p>
+     * @param level The level of the enchantment
+     * @return The modified cost of this enchantment
+     */
+    public abstract int getMinModifiedCost(int level);
+
+    /**
+     * Gets the maximum modified cost of this enchantment at a specific level.
+     * <p>
+     * Note this is not the number of experience levels needed, and does not directly translate to the levels shown in an enchanting table.
+     * This value is used in combination with factors such as tool enchantability to determine a final cost.
+     * See <a href="https://minecraft.wiki/w/Enchanting/Levels">https://minecraft.wiki/w/Enchanting/Levels</a> for more information.
+     * </p>
+     * @param level The level of the enchantment
+     * @return The modified cost of this enchantment
+     */
+    public abstract int getMaxModifiedCost(int level);
+
+    /**
+     * Gets cost of applying this enchantment using an anvil.
+     * <p>
+     * Note that this is halved when using an enchantment book, and is multiplied by the level of the enchantment.
+     * See <a href="https://minecraft.wiki/w/Anvil_mechanics">https://minecraft.wiki/w/Anvil_mechanics</a> for more information.
+     * </p>
+     * @return The anvil cost of this enchantment
+     */
+    public abstract int getAnvilCost();
+
+    /**
+     * Gets the rarity of this enchantment.
+     *
+     * @return the rarity
+     * @deprecated As of 1.20.5 enchantments do not have a rarity.
+     */
+    @NotNull
+    @Deprecated(forRemoval = true, since = "1.20.5")
+    @Contract("-> fail")
+    public abstract io.papermc.paper.enchantments.EnchantmentRarity getRarity();
+
+    /**
+     * Gets the damage increase as a result of the level and entity category specified
+     *
+     * @param level the level of enchantment
+     * @param entityCategory the category of entity
+     * @return the damage increase
+     * @deprecated Enchantments now have a complex effect systems that cannot be reduced to a simple damage increase.
+     */
+    @Contract("_, _ -> fail")
+    @Deprecated(forRemoval = true, since = "1.20.5")
+    public abstract float getDamageIncrease(int level, @NotNull org.bukkit.entity.EntityCategory entityCategory);
+
+    /**
+     * Gets the damage increase as a result of the level and entity type specified
+     *
+     * @param level the level of enchantment
+     * @param entityType the type of entity.
+     * @return the damage increase
+     * @deprecated Enchantments now have a complex effect systems that cannot be reduced to a simple damage increase.
+     */
+    @Contract("_, _ -> fail")
+    @Deprecated(forRemoval = true, since = "1.21")
+    public abstract float getDamageIncrease(int level, @NotNull org.bukkit.entity.EntityType entityType);
+
+    /**
+     * Gets the equipment slots where this enchantment is considered "active".
+     *
+     * @return the equipment slots
+     * @deprecated Use {@link #getActiveSlotGroups()} instead as enchantments are now applicable to a group of equipment slots.
+     */
+    @NotNull
+    @Deprecated(forRemoval = true, since = "1.21")
+    public java.util.Set<org.bukkit.inventory.EquipmentSlot> getActiveSlots() {
+        final java.util.Set<org.bukkit.inventory.EquipmentSlotGroup> slots = this.getActiveSlotGroups();
+        return java.util.Arrays.stream(org.bukkit.inventory.EquipmentSlot.values()).filter(e -> {
+            for (final org.bukkit.inventory.EquipmentSlotGroup group : slots) {
+                if (group.test(e)) return true;
+            }
+            return false;
+        }).collect(java.util.stream.Collectors.toSet());
+    }
+
+    /**
+     * Gets the equipment slots where this enchantment is considered "active".
+     *
+     * @return the equipment slots
+     */
+    @NotNull
+    public abstract java.util.Set<org.bukkit.inventory.EquipmentSlotGroup> getActiveSlotGroups();
+    // Paper end - more Enchantment API
+
     // Paper start - mark translation key as deprecated
     /**
      * @deprecated this method assumes that the enchantments description
diff --git a/src/main/java/org/bukkit/enchantments/EnchantmentWrapper.java b/src/main/java/org/bukkit/enchantments/EnchantmentWrapper.java
index f4422da4ebb0dc6551305f3e8468817eb08bdbc9..ca3b2f9be7802f94bacc46e28e396054089f2737 100644
--- a/src/main/java/org/bukkit/enchantments/EnchantmentWrapper.java
+++ b/src/main/java/org/bukkit/enchantments/EnchantmentWrapper.java
@@ -31,5 +31,42 @@ public abstract class EnchantmentWrapper extends Enchantment {
     public @NotNull String translationKey() {
         return getEnchantment().translationKey();
     }
+
+    @Override
+    public boolean isTradeable() {
+        return getEnchantment().isTradeable();
+    }
+
+    @Override
+    public boolean isDiscoverable() {
+        return getEnchantment().isDiscoverable();
+    }
+
+    @Override
+    public int getMinModifiedCost(int level) {
+        return getEnchantment().getMinModifiedCost(level);
+    }
+
+    @Override
+    public int getMaxModifiedCost(int level) {
+        return getEnchantment().getMaxModifiedCost(level);
+    }
+
+    @NotNull
+    @Override
+    public io.papermc.paper.enchantments.EnchantmentRarity getRarity() {
+        return getEnchantment().getRarity();
+    }
+
+    @Override
+    public float getDamageIncrease(int level, @NotNull org.bukkit.entity.EntityCategory entityCategory) {
+        return getEnchantment().getDamageIncrease(level, entityCategory);
+    }
+
+    @NotNull
+    @Override
+    public java.util.Set<org.bukkit.inventory.EquipmentSlot> getActiveSlots() {
+        return getEnchantment().getActiveSlots();
+    }
     // Paper end
 }