All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.bukkit.enchantments.Enchantment Maven / Gradle / Ivy

package org.bukkit.enchantments;

import org.bukkit.command.defaults.EnchantCommand;
import org.bukkit.inventory.ItemStack;

import java.util.HashMap;
import java.util.Map;

/**
 * The various type of enchantments that may be added to armour or weapons
 */
public abstract class Enchantment {
  /**
   * Provides protection against environmental damage
   */
  public static final Enchantment PROTECTION_ENVIRONMENTAL = new EnchantmentWrapper(0);

  /**
   * Provides protection against fire damage
   */
  public static final Enchantment PROTECTION_FIRE = new EnchantmentWrapper(1);

  /**
   * Provides protection against fall damage
   */
  public static final Enchantment PROTECTION_FALL = new EnchantmentWrapper(2);

  /**
   * Provides protection against explosive damage
   */
  public static final Enchantment PROTECTION_EXPLOSIONS = new EnchantmentWrapper(3);

  /**
   * Provides protection against projectile damage
   */
  public static final Enchantment PROTECTION_PROJECTILE = new EnchantmentWrapper(4);

  /**
   * Decreases the rate of air loss whilst underwater
   */
  public static final Enchantment OXYGEN = new EnchantmentWrapper(5);

  /**
   * Increases the speed at which a player may mine underwater
   */
  public static final Enchantment WATER_WORKER = new EnchantmentWrapper(6);

  /**
   * Damages the attacker
   */
  public static final Enchantment THORNS = new EnchantmentWrapper(7);

  /**
   * Increases walking speed while in water
   */
  public static final Enchantment DEPTH_STRIDER = new EnchantmentWrapper(8);

  /**
   * Increases damage against all targets
   */
  public static final Enchantment DAMAGE_ALL = new EnchantmentWrapper(16);

  /**
   * Increases damage against undead targets
   */
  public static final Enchantment DAMAGE_UNDEAD = new EnchantmentWrapper(17);

  /**
   * Increases damage against arthropod targets
   */
  public static final Enchantment DAMAGE_ARTHROPODS = new EnchantmentWrapper(18);

  /**
   * All damage to other targets will knock them back when hit
   */
  public static final Enchantment KNOCKBACK = new EnchantmentWrapper(19);

  /**
   * When attacking a target, has a chance to set them on fire
   */
  public static final Enchantment FIRE_ASPECT = new EnchantmentWrapper(20);

  /**
   * Provides a chance of gaining extra loot when killing monsters
   */
  public static final Enchantment LOOT_BONUS_MOBS = new EnchantmentWrapper(21);

  /**
   * Increases the rate at which you mine/dig
   */
  public static final Enchantment DIG_SPEED = new EnchantmentWrapper(32);

  /**
   * Allows blocks to drop themselves instead of fragments (for example,
   * stone instead of cobblestone)
   */
  public static final Enchantment SILK_TOUCH = new EnchantmentWrapper(33);

  /**
   * Decreases the rate at which a tool looses durability
   */
  public static final Enchantment DURABILITY = new EnchantmentWrapper(34);

  /**
   * Provides a chance of gaining extra loot when destroying blocks
   */
  public static final Enchantment LOOT_BONUS_BLOCKS = new EnchantmentWrapper(35);

  /**
   * Provides extra damage when shooting arrows from bows
   */
  public static final Enchantment ARROW_DAMAGE = new EnchantmentWrapper(48);

  /**
   * Provides a knockback when an entity is hit by an arrow from a bow
   */
  public static final Enchantment ARROW_KNOCKBACK = new EnchantmentWrapper(49);

  /**
   * Sets entities on fire when hit by arrows shot from a bow
   */
  public static final Enchantment ARROW_FIRE = new EnchantmentWrapper(50);

  /**
   * Provides infinite arrows when shooting a bow
   */
  public static final Enchantment ARROW_INFINITE = new EnchantmentWrapper(51);

  /**
   * Decreases odds of catching worthless junk
   */
  public static final Enchantment LUCK = new EnchantmentWrapper(61);

  /**
   * Increases rate of fish biting your hook
   */
  public static final Enchantment LURE = new EnchantmentWrapper(62);

  private static final Map byId = new HashMap();
  private static final Map byName = new HashMap();
  private static boolean acceptingNew = true;
  private final int id;

  public Enchantment(int id) {
    this.id = id;
  }

  /**
   * Registers an enchantment with the given ID and object.
   * 

* Generally not to be used from within a plugin. * * @param enchantment Enchantment to register */ public static void registerEnchantment(Enchantment enchantment) { // ChestMC start - allows register new enchantments. if (byId.containsKey(enchantment.id) || byName.containsKey(enchantment.getName())) { //throw new IllegalArgumentException("Cannot set already-set enchantment"); return; } /* else if (!isAcceptingRegistrations()) { throw new IllegalStateException("No longer accepting new enchantments (can only be done by the server implementation)"); } */ // ChestMC end. byId.put(enchantment.id, enchantment); byName.put(enchantment.getName(), enchantment); } /** * Checks if this is accepting Enchantment registrations. * * @return True if the server Implementation may add enchantments */ public static boolean isAcceptingRegistrations() { return acceptingNew; } /** * Stops accepting any enchantment registrations */ public static void stopAcceptingRegistrations() { acceptingNew = false; EnchantCommand.buildEnchantments(); } /** * Gets the Enchantment at the specified ID * * @param id ID to fetch * @return Resulting Enchantment, or null if not found * @deprecated Magic value */ @Deprecated public static Enchantment getById(int id) { return byId.get(id); } /** * Gets the Enchantment at the specified name * * @param name Name to fetch * @return Resulting Enchantment, or null if not found */ public static Enchantment getByName(String name) { return byName.get(name); } /** * Gets an array of all the registered {@link Enchantment}s * * @return Array of enchantments */ public static Enchantment[] values() { return byId.values().toArray(new Enchantment[byId.size()]); } /** * Gets the unique ID of this enchantment * * @return Unique ID * @deprecated Magic value */ @Deprecated public int getId() { return id; } /** * Gets the unique name of this enchantment * * @return Unique name */ public abstract String getName(); /** * Gets the maximum level that this Enchantment may become. * * @return Maximum level of the Enchantment */ public abstract int getMaxLevel(); /** * Gets the level that this Enchantment should start at * * @return Starting level of the Enchantment */ public abstract int getStartLevel(); /** * Gets the type of {@link ItemStack} that may fit this Enchantment. * * @return Target type of the Enchantment */ public abstract EnchantmentTarget getItemTarget(); /** * Check if this enchantment conflicts with another enchantment. * * @param other The enchantment to check against * @return True if there is a conflict. */ public abstract boolean conflictsWith(Enchantment other); /** * Checks if this Enchantment may be applied to the given {@link * ItemStack}. *

* This does not check if it conflicts with any enchantments already * applied to the item. * * @param item Item to test * @return True if the enchantment may be applied, otherwise False */ public abstract boolean canEnchantItem(ItemStack item); @Override public boolean equals(Object obj) { if (obj == null) { return false; } if (!(obj instanceof Enchantment)) { return false; } final Enchantment other = (Enchantment) obj; return this.id == other.id; } @Override public int hashCode() { return id; } @Override public String toString() { return "Enchantment[" + id + ", " + getName() + "]"; } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy