aboutsummaryrefslogtreecommitdiffhomepage
path: root/patches/api/0283-More-Enchantment-API.patch
blob: 98c3ef060b9d428428bae60ee201f9c16ffdb745 (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
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>

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..e6a40c1fcea761bd66743b50e3da3d14797d05b0
--- /dev/null
+++ b/src/main/java/io/papermc/paper/enchantments/EnchantmentRarity.java
@@ -0,0 +1,24 @@
+package io.papermc.paper.enchantments;
+
+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 4a88198be6634b47fc51e55acc5f6415e4aff1ab..d50d4c3121a966adcc47173ddb4575f7ad504148 100644
--- a/src/main/java/org/bukkit/enchantments/Enchantment.java
+++ b/src/main/java/org/bukkit/enchantments/Enchantment.java
@@ -269,11 +269,7 @@ public abstract class Enchantment implements Keyed, net.kyori.adventure.translat
      * 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
     public abstract boolean isCursed();
 
     /**
@@ -307,6 +303,70 @@ public abstract class Enchantment implements Keyed, net.kyori.adventure.translat
      * @return the name of the enchantment with {@code level} applied
      */
     public abstract net.kyori.adventure.text.@NotNull Component displayName(int level);
+
+    /**
+     * 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 the rarity of this enchantment.
+     *
+     * @return the rarity
+     */
+    @NotNull
+    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
+     */
+    public abstract float getDamageIncrease(int level, @NotNull org.bukkit.entity.EntityCategory entityCategory);
+
+    /**
+     * Gets the equipment slots where this enchantment is considered "active".
+     *
+     * @return the equipment slots
+     */
+    @NotNull
+    public abstract java.util.Set<org.bukkit.inventory.EquipmentSlot> getActiveSlots();
     // Paper end
 
     /**
diff --git a/src/main/java/org/bukkit/enchantments/EnchantmentWrapper.java b/src/main/java/org/bukkit/enchantments/EnchantmentWrapper.java
index ac0371285370594d4de1554871b19bbcd2311730..da5d153a3e55a38b767359564001ad8663f9730b 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
 }