001 package org.bukkit.material;
002
003 import org.bukkit.inventory.ItemStack;
004 import org.bukkit.Material;
005
006 /**
007 * Handles specific metadata for certain items or blocks
008 */
009 public class MaterialData implements Cloneable {
010 private final int type;
011 private byte data = 0;
012
013 /**
014 *
015 * @deprecated Magic value
016 */
017 @Deprecated
018 public MaterialData(final int type) {
019 this(type, (byte) 0);
020 }
021
022 public MaterialData(final Material type) {
023 this(type, (byte) 0);
024 }
025
026 /**
027 *
028 * @deprecated Magic value
029 */
030 @Deprecated
031 public MaterialData(final int type, final byte data) {
032 this.type = type;
033 this.data = data;
034 }
035
036 /**
037 *
038 * @deprecated Magic value
039 */
040 @Deprecated
041 public MaterialData(final Material type, final byte data) {
042 this(type.getId(), data);
043 }
044
045 /**
046 * Gets the raw data in this material
047 *
048 * @return Raw data
049 * @deprecated Magic value
050 */
051 @Deprecated
052 public byte getData() {
053 return data;
054 }
055
056 /**
057 * Sets the raw data of this material
058 *
059 * @param data New raw data
060 * @deprecated Magic value
061 */
062 @Deprecated
063 public void setData(byte data) {
064 this.data = data;
065 }
066
067 /**
068 * Gets the Material that this MaterialData represents
069 *
070 * @return Material represented by this MaterialData
071 */
072 public Material getItemType() {
073 return Material.getMaterial(type);
074 }
075
076 /**
077 * Gets the Material Id that this MaterialData represents
078 *
079 * @return Material Id represented by this MaterialData
080 * @deprecated Magic value
081 */
082 @Deprecated
083 public int getItemTypeId() {
084 return type;
085 }
086
087 /**
088 * Creates a new ItemStack based on this MaterialData
089 *
090 * @return New ItemStack containing a copy of this MaterialData
091 */
092 public ItemStack toItemStack() {
093 return new ItemStack(type, 0, data);
094 }
095
096 /**
097 * Creates a new ItemStack based on this MaterialData
098 *
099 * @param amount The stack size of the new stack
100 * @return New ItemStack containing a copy of this MaterialData
101 */
102 public ItemStack toItemStack(int amount) {
103 return new ItemStack(type, amount, data);
104 }
105
106 @Override
107 public String toString() {
108 return getItemType() + "(" + getData() + ")";
109 }
110
111 @Override
112 public int hashCode() {
113 return ((getItemTypeId() << 8) ^ getData());
114 }
115
116 @Override
117 public boolean equals(Object obj) {
118 if (obj != null && obj instanceof MaterialData) {
119 MaterialData md = (MaterialData) obj;
120
121 return (md.getItemTypeId() == getItemTypeId() && md.getData() == getData());
122 } else {
123 return false;
124 }
125 }
126
127 @Override
128 public MaterialData clone() {
129 try {
130 return (MaterialData) super.clone();
131 } catch (CloneNotSupportedException e) {
132 throw new Error(e);
133 }
134 }
135 }