diff options
author | md_5 <git@md-5.net> | 2016-11-22 14:35:54 +1100 |
---|---|---|
committer | md_5 <git@md-5.net> | 2016-11-22 14:35:54 +1100 |
commit | a64b99c95a507a8d3c108930db1698b432d72554 (patch) | |
tree | a32b8108e7fd7170bb3c02f27d58cdb12d9bb20b /src/main/java | |
parent | 7359112e8c758c412f99e007c5a7689de94197f3 (diff) | |
download | craftbukkit-a64b99c95a507a8d3c108930db1698b432d72554.tar craftbukkit-a64b99c95a507a8d3c108930db1698b432d72554.tar.gz craftbukkit-a64b99c95a507a8d3c108930db1698b432d72554.tar.lz craftbukkit-a64b99c95a507a8d3c108930db1698b432d72554.tar.xz craftbukkit-a64b99c95a507a8d3c108930db1698b432d72554.zip |
Add Unbreakable to ItemMeta
Diffstat (limited to 'src/main/java')
-rw-r--r-- | src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaItem.java | 38 |
1 files changed, 36 insertions, 2 deletions
diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaItem.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaItem.java index 294f6c90..a169e101 100644 --- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaItem.java +++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaItem.java @@ -211,12 +211,15 @@ class CraftMetaItem implements ItemMeta, Repairable { static final ItemMetaKey ATTRIBUTES_UUID_LOW = new ItemMetaKey("UUIDLeast"); @Specific(Specific.To.NBT) static final ItemMetaKey HIDEFLAGS = new ItemMetaKey("HideFlags", "ItemFlags"); + @Specific(Specific.To.NBT) + static final ItemMetaKey UNBREAKABLE = new ItemMetaKey("Unbreakable"); private String displayName; private List<String> lore; private Map<Enchantment, Integer> enchantments; private int repairCost; private int hideFlag; + private boolean unbreakable; private static final Set<String> HANDLED_TAGS = Sets.newHashSet(); @@ -239,6 +242,7 @@ class CraftMetaItem implements ItemMeta, Repairable { this.repairCost = meta.repairCost; this.hideFlag = meta.hideFlag; + this.unbreakable = meta.unbreakable; this.unhandledTags.putAll(meta.unhandledTags); } @@ -270,6 +274,9 @@ class CraftMetaItem implements ItemMeta, Repairable { if (tag.hasKey(HIDEFLAGS.NBT)) { hideFlag = tag.getInt(HIDEFLAGS.NBT); } + if (tag.hasKey(UNBREAKABLE.NBT)) { + unbreakable = tag.getBoolean(UNBREAKABLE.NBT); + } if (tag.get(ATTRIBUTES.NBT) instanceof NBTTagList) { NBTTagList save = null; @@ -371,6 +378,11 @@ class CraftMetaItem implements ItemMeta, Repairable { } } + Boolean unbreakable = SerializableMeta.getObject(Boolean.class, map, UNBREAKABLE.BUKKIT, true); + if (unbreakable != null) { + setUnbreakable(unbreakable); + } + String internal = SerializableMeta.getString(map, "internal", true); if (internal != null) { ByteArrayInputStream buf = new ByteArrayInputStream(Base64.decodeBase64(internal)); @@ -430,6 +442,10 @@ class CraftMetaItem implements ItemMeta, Repairable { itemTag.setInt(REPAIR.NBT, repairCost); } + if (isUnbreakable()) { + itemTag.setBoolean(UNBREAKABLE.NBT, unbreakable); + } + for (Map.Entry<String, NBTBase> e : unhandledTags.entrySet()) { itemTag.set(e.getKey(), e.getValue()); } @@ -484,7 +500,7 @@ class CraftMetaItem implements ItemMeta, Repairable { @Overridden boolean isEmpty() { - return !(hasDisplayName() || hasEnchants() || hasLore() || hasRepairCost() || !unhandledTags.isEmpty() || hideFlag != 0); + return !(hasDisplayName() || hasEnchants() || hasLore() || hasRepairCost() || !unhandledTags.isEmpty() || hideFlag != 0 || isUnbreakable()); } public String getDisplayName() { @@ -610,6 +626,16 @@ class CraftMetaItem implements ItemMeta, Repairable { } @Override + public boolean isUnbreakable() { + return unbreakable; + } + + @Override + public void setUnbreakable(boolean unbreakable) { + this.unbreakable = unbreakable; + } + + @Override public final boolean equals(Object object) { if (object == null) { return false; @@ -635,7 +661,8 @@ class CraftMetaItem implements ItemMeta, Repairable { && (this.hasLore() ? that.hasLore() && this.lore.equals(that.lore) : !that.hasLore()) && (this.hasRepairCost() ? that.hasRepairCost() && this.repairCost == that.repairCost : !that.hasRepairCost()) && (this.unhandledTags.equals(that.unhandledTags)) - && (this.hideFlag == that.hideFlag); + && (this.hideFlag == that.hideFlag) + && (this.isUnbreakable() == that.isUnbreakable()); } /** @@ -662,6 +689,7 @@ class CraftMetaItem implements ItemMeta, Repairable { hash = 61 * hash + (hasRepairCost() ? this.repairCost : 0); hash = 61 * hash + unhandledTags.hashCode(); hash = 61 * hash + hideFlag; + hash = 61 * hash + (isUnbreakable() ? 1231 : 1237); return hash; } @@ -677,6 +705,7 @@ class CraftMetaItem implements ItemMeta, Repairable { clone.enchantments = new HashMap<Enchantment, Integer>(this.enchantments); } clone.hideFlag = this.hideFlag; + clone.unbreakable = this.unbreakable; return clone; } catch (CloneNotSupportedException e) { throw new Error(e); @@ -714,6 +743,10 @@ class CraftMetaItem implements ItemMeta, Repairable { builder.put(HIDEFLAGS.BUKKIT, hideFlags); } + if (isUnbreakable()) { + builder.put(UNBREAKABLE.BUKKIT, unbreakable); + } + final Map<String, NBTBase> internalTags = new HashMap<String, NBTBase>(unhandledTags); serializeInternal(internalTags); if (!internalTags.isEmpty()) { @@ -800,6 +833,7 @@ class CraftMetaItem implements ItemMeta, Repairable { REPAIR.NBT, ENCHANTMENTS.NBT, HIDEFLAGS.NBT, + UNBREAKABLE.NBT, CraftMetaMap.MAP_SCALING.NBT, CraftMetaPotion.POTION_EFFECTS.NBT, CraftMetaPotion.DEFAULT_POTION.NBT, |