Newer
Older
ultramine_bukkit / src / main / java / org / bukkit / material / MaterialData.java
@vlad20012 vlad20012 on 24 Feb 2017 2 KB initial
package org.bukkit.material;

import org.bukkit.Material;
import org.bukkit.inventory.ItemStack;

/**
 * Handles specific metadata for certain items or blocks
 */
public class MaterialData implements Cloneable
{
	private final int type;
	private byte data = 0;

	/**
	 * @deprecated Magic value
	 */
	@Deprecated
	public MaterialData(final int type)
	{
		this(type, (byte) 0);
	}

	public MaterialData(final Material type)
	{
		this(type, (byte) 0);
	}

	/**
	 * @deprecated Magic value
	 */
	@Deprecated
	public MaterialData(final int type, final byte data)
	{
		this.type = type;
		this.data = data;
	}

	/**
	 * @deprecated Magic value
	 */
	@Deprecated
	public MaterialData(final Material type, final byte data)
	{
		this(type.getId(), data);
	}

	/**
	 * Gets the raw data in this material
	 *
	 * @return Raw data
	 * @deprecated Magic value
	 */
	@Deprecated
	public byte getData()
	{
		return data;
	}

	/**
	 * Sets the raw data of this material
	 *
	 * @param data New raw data
	 * @deprecated Magic value
	 */
	@Deprecated
	public void setData(byte data)
	{
		this.data = data;
	}

	/**
	 * Gets the Material that this MaterialData represents
	 *
	 * @return Material represented by this MaterialData
	 */
	public Material getItemType()
	{
		return Material.getMaterial(type);
	}

	/**
	 * Gets the Material Id that this MaterialData represents
	 *
	 * @return Material Id represented by this MaterialData
	 * @deprecated Magic value
	 */
	@Deprecated
	public int getItemTypeId()
	{
		return type;
	}

	/**
	 * Creates a new ItemStack based on this MaterialData
	 *
	 * @return New ItemStack containing a copy of this MaterialData
	 */
	public ItemStack toItemStack()
	{
		return new ItemStack(type, 0, data);
	}

	/**
	 * Creates a new ItemStack based on this MaterialData
	 *
	 * @param amount The stack size of the new stack
	 * @return New ItemStack containing a copy of this MaterialData
	 */
	public ItemStack toItemStack(int amount)
	{
		return new ItemStack(type, amount, data);
	}

	@Override
	public String toString()
	{
		return getItemType() + "(" + getData() + ")";
	}

	@Override
	public int hashCode()
	{
		return ((getItemTypeId() << 8) ^ getData());
	}

	@Override
	public boolean equals(Object obj)
	{
		if(obj != null && obj instanceof MaterialData)
		{
			MaterialData md = (MaterialData) obj;

			return (md.getItemTypeId() == getItemTypeId() && md.getData() == getData());
		}
		else
		{
			return false;
		}
	}

	@Override
	public MaterialData clone()
	{
		try
		{
			return (MaterialData) super.clone();
		} catch(CloneNotSupportedException e)
		{
			throw new Error(e);
		}
	}
}