Class Enchantment

java.lang.Object
org.bukkit.enchantments.Enchantment
All Implemented Interfaces:
net.kyori.adventure.key.Keyed, Translatable, Keyed
Direct Known Subclasses:
EnchantmentWrapper

public abstract class Enchantment extends Object implements Keyed, Translatable
The various type of enchantments that may be added to armour or weapons
  • Field Details

    • PROTECTION_ENVIRONMENTAL

      public static final Enchantment PROTECTION_ENVIRONMENTAL
      Provides protection against environmental damage
    • PROTECTION_FIRE

      public static final Enchantment PROTECTION_FIRE
      Provides protection against fire damage
    • PROTECTION_FALL

      public static final Enchantment PROTECTION_FALL
      Provides protection against fall damage
    • PROTECTION_EXPLOSIONS

      public static final Enchantment PROTECTION_EXPLOSIONS
      Provides protection against explosive damage
    • PROTECTION_PROJECTILE

      public static final Enchantment PROTECTION_PROJECTILE
      Provides protection against projectile damage
    • OXYGEN

      public static final Enchantment OXYGEN
      Decreases the rate of air loss whilst underwater
    • WATER_WORKER

      public static final Enchantment WATER_WORKER
      Increases the speed at which a player may mine underwater
    • THORNS

      public static final Enchantment THORNS
      Damages the attacker
    • DEPTH_STRIDER

      public static final Enchantment DEPTH_STRIDER
      Increases walking speed while in water
    • FROST_WALKER

      public static final Enchantment FROST_WALKER
      Freezes any still water adjacent to ice / frost which player is walking on
    • BINDING_CURSE

      public static final Enchantment BINDING_CURSE
      Item cannot be removed
    • DAMAGE_ALL

      public static final Enchantment DAMAGE_ALL
      Increases damage against all targets
    • DAMAGE_UNDEAD

      public static final Enchantment DAMAGE_UNDEAD
      Increases damage against undead targets
    • DAMAGE_ARTHROPODS

      public static final Enchantment DAMAGE_ARTHROPODS
      Increases damage against arthropod targets
    • KNOCKBACK

      public static final Enchantment KNOCKBACK
      All damage to other targets will knock them back when hit
    • FIRE_ASPECT

      public static final Enchantment FIRE_ASPECT
      When attacking a target, has a chance to set them on fire
    • LOOT_BONUS_MOBS

      public static final Enchantment LOOT_BONUS_MOBS
      Provides a chance of gaining extra loot when killing monsters
    • SWEEPING_EDGE

      public static final Enchantment SWEEPING_EDGE
      Increases damage against targets when using a sweep attack
    • DIG_SPEED

      public static final Enchantment DIG_SPEED
      Increases the rate at which you mine/dig
    • SILK_TOUCH

      public static final Enchantment SILK_TOUCH
      Allows blocks to drop themselves instead of fragments (for example, stone instead of cobblestone)
    • DURABILITY

      public static final Enchantment DURABILITY
      Decreases the rate at which a tool looses durability
    • LOOT_BONUS_BLOCKS

      public static final Enchantment LOOT_BONUS_BLOCKS
      Provides a chance of gaining extra loot when destroying blocks
    • ARROW_DAMAGE

      public static final Enchantment ARROW_DAMAGE
      Provides extra damage when shooting arrows from bows
    • ARROW_KNOCKBACK

      public static final Enchantment ARROW_KNOCKBACK
      Provides a knockback when an entity is hit by an arrow from a bow
    • ARROW_FIRE

      public static final Enchantment ARROW_FIRE
      Sets entities on fire when hit by arrows shot from a bow
    • ARROW_INFINITE

      public static final Enchantment ARROW_INFINITE
      Provides infinite arrows when shooting a bow
    • LUCK

      public static final Enchantment LUCK
      Decreases odds of catching worthless junk
    • LURE

      public static final Enchantment LURE
      Increases rate of fish biting your hook
    • LOYALTY

      public static final Enchantment LOYALTY
      Causes a thrown trident to return to the player who threw it
    • IMPALING

      public static final Enchantment IMPALING
      Deals more damage to mobs that live in the ocean
    • RIPTIDE

      public static final Enchantment RIPTIDE
      When it is rainy, launches the player in the direction their trident is thrown
    • CHANNELING

      public static final Enchantment CHANNELING
      Strikes lightning when a mob is hit with a trident if conditions are stormy
    • MULTISHOT

      public static final Enchantment MULTISHOT
      Shoot multiple arrows from crossbows
    • QUICK_CHARGE

      public static final Enchantment QUICK_CHARGE
      Charges crossbows quickly
    • PIERCING

      public static final Enchantment PIERCING
      Crossbow projectiles pierce entities
    • MENDING

      public static final Enchantment MENDING
      Allows mending the item using experience orbs
    • VANISHING_CURSE

      public static final Enchantment VANISHING_CURSE
      Item disappears instead of dropping
    • SOUL_SPEED

      public static final Enchantment SOUL_SPEED
      Walk quicker on soul blocks
    • SWIFT_SNEAK

      public static final Enchantment SWIFT_SNEAK
      Walk quicker while sneaking
  • Constructor Details

    • Enchantment

      public Enchantment()
  • Method Details

    • getName

      @NotNull @Deprecated public abstract @NotNull String getName()
      Deprecated.
      enchantments are badly named, use Keyed.getKey().
      Gets the unique name of this enchantment
      Returns:
      Unique name
    • getMaxLevel

      public abstract int getMaxLevel()
      Gets the maximum level that this Enchantment may become.
      Returns:
      Maximum level of the Enchantment
    • getStartLevel

      public abstract int getStartLevel()
      Gets the level that this Enchantment should start at
      Returns:
      Starting level of the Enchantment
    • getItemTarget

      @NotNull public abstract @NotNull EnchantmentTarget getItemTarget()
      Gets the type of ItemStack that may fit this Enchantment.
      Returns:
      Target type of the Enchantment
    • isTreasure

      public abstract boolean isTreasure()
      Checks if this enchantment is a treasure enchantment.
      Treasure enchantments can only be received via looting, trading, or fishing.
      Returns:
      true if the enchantment is a treasure enchantment
    • isCursed

      public abstract boolean isCursed()
      Checks if this enchantment is a cursed enchantment
      Cursed enchantments are found the same way treasure enchantments are
      Returns:
      true if the enchantment is cursed
    • conflictsWith

      public abstract boolean conflictsWith(@NotNull @NotNull Enchantment other)
      Check if this enchantment conflicts with another enchantment.
      Parameters:
      other - The enchantment to check against
      Returns:
      True if there is a conflict.
    • canEnchantItem

      public abstract boolean canEnchantItem(@NotNull @NotNull ItemStack item)
      Checks if this Enchantment may be applied to the given ItemStack.

      This does not check if it conflicts with any enchantments already applied to the item.

      Parameters:
      item - Item to test
      Returns:
      True if the enchantment may be applied, otherwise False
    • displayName

      public abstract @NotNull Component displayName(int level)
      Get the name of the enchantment with its applied level.

      If the given level is either less than the getStartLevel() or greater than the getMaxLevel(), the level may not be shown in the numeral format one may otherwise expect.

      Parameters:
      level - the level of the enchantment to show
      Returns:
      the name of the enchantment with level applied
    • isTradeable

      public abstract boolean isTradeable()
      Checks if this enchantment can be found in villager trades.
      Returns:
      true if the enchantment can be found in trades
    • isDiscoverable

      public abstract boolean isDiscoverable()
      Checks if this enchantment can be found in an enchanting table or use to enchant items generated by loot tables.
      Returns:
      true if the enchantment can be found in a table or by loot tables
    • getMinModifiedCost

      public abstract int getMinModifiedCost(int level)
      Gets the minimum modified cost of this enchantment at a specific level.

      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 https://minecraft.wiki/w/Enchanting/Levels for more information.

      Parameters:
      level - The level of the enchantment
      Returns:
      The modified cost of this enchantment
    • getMaxModifiedCost

      public abstract int getMaxModifiedCost(int level)
      Gets the maximum modified cost of this enchantment at a specific level.

      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 https://minecraft.wiki/w/Enchanting/Levels for more information.

      Parameters:
      level - The level of the enchantment
      Returns:
      The modified cost of this enchantment
    • getRarity

      @NotNull public abstract EnchantmentRarity getRarity()
      Gets the rarity of this enchantment.
      Returns:
      the rarity
    • getDamageIncrease

      public abstract float getDamageIncrease(int level, @NotNull EntityCategory entityCategory)
      Gets the damage increase as a result of the level and entity category specified
      Parameters:
      level - the level of enchantment
      entityCategory - the category of entity
      Returns:
      the damage increase
    • getActiveSlots

      @NotNull public abstract Set<EquipmentSlot> getActiveSlots()
      Gets the equipment slots where this enchantment is considered "active".
      Returns:
      the equipment slots
    • getByKey

      @Contract("null -> null") @Nullable @Deprecated public static @Nullable Enchantment getByKey(@Nullable @Nullable NamespacedKey key)
      Deprecated.
      only for backwards compatibility, use Registry.get(NamespacedKey) instead
      Gets the Enchantment at the specified key
      Parameters:
      key - key to fetch
      Returns:
      Resulting Enchantment, or null if not found
    • getByName

      @Deprecated @Contract("null -> null") @Nullable public static @Nullable Enchantment getByName(@Nullable @Nullable String name)
      Deprecated.
      enchantments are badly named, use getByKey(org.bukkit.NamespacedKey).
      Gets the Enchantment at the specified name
      Parameters:
      name - Name to fetch
      Returns:
      Resulting Enchantment, or null if not found
    • values

      @NotNull @Deprecated public static @NotNull Enchantment[] values()
      Deprecated.
      Gets an array of all the registered Enchantments
      Returns:
      Array of enchantments