Bukkit  1.4.7-R1.0
 All Classes Namespaces Files Functions Variables Enumerator Pages
Enchantment.java
Go to the documentation of this file.
1 package org.bukkit.enchantments;
2 
3 import java.util.HashMap;
4 import java.util.Map;
5 
6 import org.bukkit.command.defaults.EnchantCommand;
7 import org.bukkit.inventory.ItemStack;
8 
12 public abstract class Enchantment {
17 
21  public static final Enchantment PROTECTION_FIRE = new EnchantmentWrapper(1);
22 
26  public static final Enchantment PROTECTION_FALL = new EnchantmentWrapper(2);
27 
32 
37 
41  public static final Enchantment OXYGEN = new EnchantmentWrapper(5);
42 
46  public static final Enchantment WATER_WORKER = new EnchantmentWrapper(6);
47 
51  public static final Enchantment THORNS = new EnchantmentWrapper(7);
52 
56  public static final Enchantment DAMAGE_ALL = new EnchantmentWrapper(16);
57 
61  public static final Enchantment DAMAGE_UNDEAD = new EnchantmentWrapper(17);
62 
66  public static final Enchantment DAMAGE_ARTHROPODS = new EnchantmentWrapper(18);
67 
71  public static final Enchantment KNOCKBACK = new EnchantmentWrapper(19);
72 
76  public static final Enchantment FIRE_ASPECT = new EnchantmentWrapper(20);
77 
81  public static final Enchantment LOOT_BONUS_MOBS = new EnchantmentWrapper(21);
82 
86  public static final Enchantment DIG_SPEED = new EnchantmentWrapper(32);
87 
91  public static final Enchantment SILK_TOUCH = new EnchantmentWrapper(33);
92 
96  public static final Enchantment DURABILITY = new EnchantmentWrapper(34);
97 
101  public static final Enchantment LOOT_BONUS_BLOCKS = new EnchantmentWrapper(35);
102 
106  public static final Enchantment ARROW_DAMAGE = new EnchantmentWrapper(48);
107 
111  public static final Enchantment ARROW_KNOCKBACK = new EnchantmentWrapper(49);
112 
116  public static final Enchantment ARROW_FIRE = new EnchantmentWrapper(50);
117 
121  public static final Enchantment ARROW_INFINITE = new EnchantmentWrapper(51);
122 
123  private static final Map<Integer, Enchantment> byId = new HashMap<Integer, Enchantment>();
124  private static final Map<String, Enchantment> byName = new HashMap<String, Enchantment>();
125  private static boolean acceptingNew = true;
126  private final int id;
127 
128  public Enchantment(int id) {
129  this.id = id;
130  }
131 
137  public int getId() {
138  return id;
139  }
140 
146  public abstract String getName();
147 
153  public abstract int getMaxLevel();
154 
160  public abstract int getStartLevel();
161 
167  public abstract EnchantmentTarget getItemTarget();
168 
175  public abstract boolean conflictsWith(Enchantment other);
176 
184  public abstract boolean canEnchantItem(ItemStack item);
185 
186  @Override
187  public boolean equals(Object obj) {
188  if (obj == null) {
189  return false;
190  }
191  if (!(obj instanceof Enchantment)) {
192  return false;
193  }
194  final Enchantment other = (Enchantment) obj;
195  if (this.id != other.id) {
196  return false;
197  }
198  return true;
199  }
200 
201  @Override
202  public int hashCode() {
203  return id;
204  }
205 
206  @Override
207  public String toString() {
208  return "Enchantment[" + id + ", " + getName() + "]";
209  }
210 
218  public static void registerEnchantment(Enchantment enchantment) {
219  if (byId.containsKey(enchantment.id) || byName.containsKey(enchantment.getName())) {
220  throw new IllegalArgumentException("Cannot set already-set enchantment");
221  } else if (!isAcceptingRegistrations()) {
222  throw new IllegalStateException("No longer accepting new enchantments (can only be done by the server implementation)");
223  }
224 
225  byId.put(enchantment.id, enchantment);
226  byName.put(enchantment.getName(), enchantment);
227  }
228 
234  public static boolean isAcceptingRegistrations() {
235  return acceptingNew;
236  }
237 
241  public static void stopAcceptingRegistrations() {
242  acceptingNew = false;
244  }
245 
252  public static Enchantment getById(int id) {
253  return byId.get(id);
254  }
255 
262  public static Enchantment getByName(String name) {
263  return byName.get(name);
264  }
265 
271  public static Enchantment[] values() {
272  return byId.values().toArray(new Enchantment[byId.size()]);
273  }
274 }