2021-06-11 14:02:28 +02:00
|
|
|
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
|
|
|
|
|
2023-11-11 21:09:48 +01:00
|
|
|
Co-authored-by: Luis <luisc99@icloud.com>
|
2021-06-11 14:02:28 +02:00
|
|
|
|
|
|
|
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
|
2024-04-25 18:42:50 +02:00
|
|
|
index 3375ce0f9ac50cd3f145291ceb587d4e6f72569c..a72202b653549b4074feb89748849fcb495ba0d4 100644
|
2021-06-11 14:02:28 +02:00
|
|
|
--- a/src/main/java/org/bukkit/enchantments/Enchantment.java
|
|
|
|
+++ b/src/main/java/org/bukkit/enchantments/Enchantment.java
|
2024-04-23 19:02:08 +02:00
|
|
|
@@ -291,11 +291,7 @@ public abstract class Enchantment implements Keyed, Translatable, net.kyori.adve
|
2021-08-30 16:49:28 +02:00
|
|
|
* 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();
|
|
|
|
|
|
|
|
/**
|
2024-04-25 18:42:50 +02:00
|
|
|
@@ -329,6 +325,84 @@ public abstract class Enchantment implements Keyed, Translatable, net.kyori.adve
|
2021-06-11 14:02:28 +02:00
|
|
|
* @return the name of the enchantment with {@code level} applied
|
|
|
|
*/
|
2023-03-23 17:49:24 +01:00
|
|
|
public abstract net.kyori.adventure.text.@NotNull Component displayName(int level);
|
2021-06-11 14:02:28 +02:00
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 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();
|
|
|
|
+
|
|
|
|
+ /**
|
2023-11-11 21:09:48 +01:00
|
|
|
+ * 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);
|
|
|
|
+
|
|
|
|
+ /**
|
2021-06-11 14:02:28 +02:00
|
|
|
+ * 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
|
2024-04-25 18:42:50 +02:00
|
|
|
+ * @deprecated Use {@link #getDamageIncrease(int, org.bukkit.entity.EntityType)} instead.
|
|
|
|
+ * Enchantment damage increase is no longer handled via {@link org.bukkit.entity.EntityCategory}s, but
|
|
|
|
+ * is instead controlled by tags, e.g. {@link org.bukkit.Tag#ENTITY_TYPES_SENSITIVE_TO_BANE_OF_ARTHROPODS}.
|
|
|
|
+ * As such, a category cannot properly represent all entities defined by the tags.
|
2021-06-11 14:02:28 +02:00
|
|
|
+ */
|
2024-04-25 18:42:50 +02:00
|
|
|
+ @Deprecated(forRemoval = true, since = "1.20.5")
|
2021-06-11 14:02:28 +02:00
|
|
|
+ public abstract float getDamageIncrease(int level, @NotNull org.bukkit.entity.EntityCategory entityCategory);
|
|
|
|
+
|
|
|
|
+ /**
|
2024-04-25 18:42:50 +02:00
|
|
|
+ * 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
|
|
|
|
+ */
|
|
|
|
+ public abstract float getDamageIncrease(int level, @NotNull org.bukkit.entity.EntityType entityType);
|
|
|
|
+
|
|
|
|
+ /**
|
2021-06-11 14:02:28 +02:00
|
|
|
+ * 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
|
|
|
|
|
2023-12-05 18:33:18 +01:00
|
|
|
/**
|
2021-06-11 14:02:28 +02:00
|
|
|
diff --git a/src/main/java/org/bukkit/enchantments/EnchantmentWrapper.java b/src/main/java/org/bukkit/enchantments/EnchantmentWrapper.java
|
2023-12-05 18:33:18 +01:00
|
|
|
index ac0371285370594d4de1554871b19bbcd2311730..da5d153a3e55a38b767359564001ad8663f9730b 100644
|
2021-06-11 14:02:28 +02:00
|
|
|
--- a/src/main/java/org/bukkit/enchantments/EnchantmentWrapper.java
|
|
|
|
+++ b/src/main/java/org/bukkit/enchantments/EnchantmentWrapper.java
|
2023-12-05 18:33:18 +01:00
|
|
|
@@ -31,5 +31,42 @@ public abstract class EnchantmentWrapper extends Enchantment {
|
2021-08-14 06:11:12 +02:00
|
|
|
public @NotNull String translationKey() {
|
|
|
|
return getEnchantment().translationKey();
|
2021-06-11 14:02:28 +02:00
|
|
|
}
|
|
|
|
+
|
|
|
|
+ @Override
|
|
|
|
+ public boolean isTradeable() {
|
|
|
|
+ return getEnchantment().isTradeable();
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @Override
|
|
|
|
+ public boolean isDiscoverable() {
|
|
|
|
+ return getEnchantment().isDiscoverable();
|
|
|
|
+ }
|
|
|
|
+
|
2023-11-11 21:09:48 +01:00
|
|
|
+ @Override
|
|
|
|
+ public int getMinModifiedCost(int level) {
|
|
|
|
+ return getEnchantment().getMinModifiedCost(level);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @Override
|
|
|
|
+ public int getMaxModifiedCost(int level) {
|
|
|
|
+ return getEnchantment().getMaxModifiedCost(level);
|
|
|
|
+ }
|
|
|
|
+
|
2021-06-11 14:02:28 +02:00
|
|
|
+ @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
|
|
|
|
}
|