3
0
Fork 1
KCauldronX/patches/org/bukkit/potion/PotionEffectType.java.patch

58 lines
2.1 KiB
Diff

--- ../src-base/minecraft/org/bukkit/potion/PotionEffectType.java
+++ ../src-work/minecraft/org/bukkit/potion/PotionEffectType.java
@@ -202,7 +202,7 @@
return "PotionEffectType[" + id + ", " + getName() + "]";
}
- private static final PotionEffectType[] byId = new PotionEffectType[24];
+ private static final Map<Integer, PotionEffectType> byId = new HashMap<Integer, PotionEffectType>(); // Cauldron change underlying storage to map
private static final Map<String, PotionEffectType> byName = new HashMap<String, PotionEffectType>();
// will break on updates.
private static boolean acceptingNew = true;
@@ -216,9 +216,9 @@
*/
@Deprecated
public static PotionEffectType getById(int id) {
- if (id >= byId.length || id < 0)
+ if (id >= byId.size() || id < 0) // Cauldron
return null;
- return byId[id];
+ return byId.get(id); // Cauldron
}
/**
@@ -240,15 +240,18 @@
* @param type PotionType to register
*/
public static void registerPotionEffectType(PotionEffectType type) {
+ // Cauldron start - allow vanilla to replace potions
+ /*
if (byId[type.id] != null || byName.containsKey(type.getName().toLowerCase())) {
throw new IllegalArgumentException("Cannot set already-set type");
} else if (!acceptingNew) {
throw new IllegalStateException(
"No longer accepting new potion effect types (can only be done by the server implementation)");
}
-
- byId[type.id] = type;
+ */
+ byId.put(type.id, type);
byName.put(type.getName().toLowerCase(), type);
+ // Cauldron end
}
/**
@@ -264,6 +267,11 @@
* @return Array of types.
*/
public static PotionEffectType[] values() {
- return byId.clone();
+ // Cauldron start
+ int maxId = 0;
+ for(int id : byId.keySet()) maxId = Math.max(maxId, id);
+ PotionEffectType[] result = new PotionEffectType[maxId + 1];
+ return byId.values().toArray(result); // Cauldron change underlying storage to map
+ // Cauldron end
}
}