More Enchantment API

Co-authored-by: Luis <luisc99@icloud.com>
Co-authored-by: Janet Blackquill <uhhadd@gmail.com>
This commit is contained in:
Jake Potrebic 2021-05-06 19:58:03 -07:00
parent fce24f3b52
commit bff4794867
3 changed files with 177 additions and 4 deletions

View file

@ -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;
}
}

View file

@ -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

View file

@ -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
}