From dd7ba4a25834236910e7a17542a8a1116d5c8d0a Mon Sep 17 00:00:00 2001 From: Wesley Wolfe Date: Wed, 9 Jan 2013 04:45:01 -0600 Subject: [PATCH] Various ItemMeta fixes. Fixes BUKKIT-3408, BUKKIT-3190, BUKKIT-3191, BUKKIT-3407 These changes relate mostly to semantical changes for serialization contract, exception of changing the map scaling value from byte to boolean, what it should have been in the first place. Appropriate unit tests were added for CraftMapMeta, as they were missing. --- .../bukkit/craftbukkit/inventory/CraftMetaBook.java | 3 +-- .../craftbukkit/inventory/CraftMetaCharge.java | 2 +- .../craftbukkit/inventory/CraftMetaFirework.java | 2 +- .../bukkit/craftbukkit/inventory/CraftMetaItem.java | 12 +++++++----- .../bukkit/craftbukkit/inventory/CraftMetaMap.java | 7 ++++--- .../craftbukkit/inventory/CraftMetaPotion.java | 2 +- 6 files changed, 15 insertions(+), 13 deletions(-) diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaBook.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaBook.java index 476089a1b..a2a91decc 100644 --- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaBook.java +++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaBook.java @@ -1,7 +1,6 @@ package org.bukkit.craftbukkit.inventory; import java.util.ArrayList; -import java.util.Collection; import java.util.List; import java.util.Map; @@ -74,7 +73,7 @@ class CraftMetaBook extends CraftMetaItem implements BookMeta { setTitle(SerializableMeta.getString(map, BOOK_TITLE.BUKKIT, true)); - Collection pages = SerializableMeta.getObject(Collection.class, map, BOOK_PAGES.BUKKIT, true); + Iterable pages = SerializableMeta.getObject(Iterable.class, map, BOOK_PAGES.BUKKIT, true); CraftMetaItem.safelyAdd(pages, this.pages, MAX_PAGE_LENGTH); } diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaCharge.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaCharge.java index 84ce4bbd4..40ac8adfb 100644 --- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaCharge.java +++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaCharge.java @@ -30,7 +30,7 @@ class CraftMetaCharge extends CraftMetaItem implements FireworkEffectMeta { CraftMetaCharge(Map map) { super(map); - effect = SerializableMeta.getObject(FireworkEffect.class, map, EXPLOSION.BUKKIT, true); + setEffect(SerializableMeta.getObject(FireworkEffect.class, map, EXPLOSION.BUKKIT, true)); } CraftMetaCharge(NBTTagCompound tag) { diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaFirework.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaFirework.java index 0ac73e1e3..5d955ef2d 100644 --- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaFirework.java +++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaFirework.java @@ -172,7 +172,7 @@ class CraftMetaFirework extends CraftMetaItem implements FireworkMeta { Integer power = SerializableMeta.getObject(Integer.class, map, FLIGHT.BUKKIT, true); if (power != null) { - this.power = power; + setPower(power); } Iterable effects = SerializableMeta.getObject(Iterable.class, map, EXPLOSIONS.BUKKIT, true); diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaItem.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaItem.java index cc976ebf6..ea6efcaa4 100644 --- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaItem.java +++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaItem.java @@ -271,14 +271,16 @@ class CraftMetaItem implements ItemMeta, Repairable { CraftMetaItem(Map map) { setDisplayName(SerializableMeta.getString(map, NAME.BUKKIT, true)); - if (map.containsKey(LORE.BUKKIT)) { - lore = (List) map.get(LORE.BUKKIT); + Iterable lore = SerializableMeta.getObject(Iterable.class, map, LORE.BUKKIT, true); + if (lore != null) { + safelyAdd(lore, this.lore = new ArrayList(), Integer.MAX_VALUE); } enchantments = buildEnchantments(map, ENCHANTMENTS); - if (map.containsKey(REPAIR.BUKKIT)) { - repairCost = (Integer) map.get(REPAIR.BUKKIT); + Integer repairCost = SerializableMeta.getObject(Integer.class, map, REPAIR.BUKKIT, true); + if (repairCost != null) { + setRepairCost(repairCost); } } @@ -556,7 +558,7 @@ class CraftMetaItem implements ItemMeta, Repairable { return SerializableMeta.Deserializers.UNSPECIFIC; } - static void safelyAdd(Collection addFrom, Collection addTo, int maxItemLength) { + static void safelyAdd(Iterable addFrom, Collection addTo, int maxItemLength) { if (addFrom == null) { return; } diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaMap.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaMap.java index 0bd57c035..5bad0edf9 100644 --- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaMap.java +++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaMap.java @@ -42,8 +42,9 @@ class CraftMetaMap extends CraftMetaItem implements MapMeta { CraftMetaMap(Map map) { super(map); - if (map.containsKey(MAP_SCALING.BUKKIT)) { - this.scaling = SerializableMeta.getBoolean(map, MAP_SCALING.BUKKIT) ? SCALING_TRUE : SCALING_FALSE; + Boolean scaling = SerializableMeta.getObject(Boolean.class, map, MAP_SCALING.BUKKIT, true); + if (scaling != null) { + setScaling(scaling); } } @@ -126,7 +127,7 @@ class CraftMetaMap extends CraftMetaItem implements MapMeta { super.serialize(builder); if (hasScaling()) { - builder.put(MAP_SCALING.BUKKIT, scaling); + builder.put(MAP_SCALING.BUKKIT, isScaling()); } return builder; diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaPotion.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaPotion.java index d8c507cb7..3d565f641 100644 --- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaPotion.java +++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaPotion.java @@ -64,7 +64,7 @@ class CraftMetaPotion extends CraftMetaItem implements PotionMeta { CraftMetaPotion(Map map) { super(map); - List rawEffectList = SerializableMeta.getObject(List.class, map, POTION_EFFECTS.BUKKIT, true); + Iterable rawEffectList = SerializableMeta.getObject(Iterable.class, map, POTION_EFFECTS.BUKKIT, true); if (rawEffectList == null) { return; }