summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorWesley Wolfe <weswolf@aol.com>2013-03-28 20:01:01 -0500
committerWesley Wolfe <weswolf@aol.com>2013-03-28 20:01:01 -0500
commitacd637d48b7550254956b8aa8a09f69980050b39 (patch)
tree30dd8fd06581cb589860ef86f801321277a5aafa /src
parent1a7e5a75ae0cebd7ba9631b7d6001beaa76fe849 (diff)
downloadcraftbukkit-acd637d48b7550254956b8aa8a09f69980050b39.tar
craftbukkit-acd637d48b7550254956b8aa8a09f69980050b39.tar.gz
craftbukkit-acd637d48b7550254956b8aa8a09f69980050b39.tar.lz
craftbukkit-acd637d48b7550254956b8aa8a09f69980050b39.tar.xz
craftbukkit-acd637d48b7550254956b8aa8a09f69980050b39.zip
Properly copy collection references in ItemMeta.clone(). Fixes BUKKIT-3913
When cloning an item, all references are copied to the new item. For collections, this makes internal changes become visible in both the old and new items. In CraftMetaItem, clone was not making copies of the appropriate collections and has been fixed for non-null values. In CraftMetaEnchantedBook and CraftMetaPotion, clone was using possible empty collection references and has been changed to explicitly null-check instead.
Diffstat (limited to 'src')
-rw-r--r--src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaEnchantedBook.java4
-rw-r--r--src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaItem.java9
-rw-r--r--src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaPotion.java4
3 files changed, 12 insertions, 5 deletions
diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaEnchantedBook.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaEnchantedBook.java
index f975e867..8d44e55e 100644
--- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaEnchantedBook.java
+++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaEnchantedBook.java
@@ -106,8 +106,8 @@ class CraftMetaEnchantedBook extends CraftMetaItem implements EnchantmentStorage
public CraftMetaEnchantedBook clone() {
CraftMetaEnchantedBook meta = (CraftMetaEnchantedBook) super.clone();
- if (hasStoredEnchants()) {
- meta.enchantments = new HashMap<Enchantment, Integer>(enchantments);
+ if (this.enchantments != null) {
+ meta.enchantments = new HashMap<Enchantment, Integer>(this.enchantments);
}
return meta;
diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaItem.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaItem.java
index 90e7ffc3..0e0bb32e 100644
--- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaItem.java
+++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaItem.java
@@ -490,7 +490,14 @@ class CraftMetaItem implements ItemMeta, Repairable {
@Override
public CraftMetaItem clone() {
try {
- return (CraftMetaItem) super.clone();
+ CraftMetaItem clone = (CraftMetaItem) super.clone();
+ if (this.lore != null) {
+ clone.lore = new ArrayList<String>(this.lore);
+ }
+ if (this.enchantments != null) {
+ clone.enchantments = new HashMap<Enchantment, Integer>(this.enchantments);
+ }
+ return clone;
} catch (CloneNotSupportedException e) {
throw new Error(e);
}
diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaPotion.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaPotion.java
index ca024d0b..e7d27d20 100644
--- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaPotion.java
+++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaPotion.java
@@ -117,8 +117,8 @@ class CraftMetaPotion extends CraftMetaItem implements PotionMeta {
@Override
public CraftMetaPotion clone() {
CraftMetaPotion clone = (CraftMetaPotion) super.clone();
- if (hasCustomEffects()) {
- clone.customEffects = new ArrayList<PotionEffect>(customEffects);
+ if (this.customEffects != null) {
+ clone.customEffects = new ArrayList<PotionEffect>(this.customEffects);
}
return clone;
}