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

import org.bukkit.Material;
import org.bukkit.block.BlockFace;

/**
 * Represents a fence gate
 */
public class Gate extends MaterialData implements Directional, Openable
{
	private static final byte OPEN_BIT = 0x4;
	private static final byte DIR_BIT = 0x3;
	private static final byte GATE_SOUTH = 0x0;
	private static final byte GATE_WEST = 0x1;
	private static final byte GATE_NORTH = 0x2;
	private static final byte GATE_EAST = 0x3;

	public Gate()
	{
		super(Material.FENCE_GATE);
	}

	public Gate(int type, byte data)
	{
		super(type, data);
	}

	public Gate(byte data)
	{
		super(Material.FENCE_GATE, data);
	}

	public void setFacingDirection(BlockFace face)
	{
		byte data = (byte) (getData() & ~DIR_BIT);

		switch(face)
		{
		default:
		case EAST:
			data |= GATE_SOUTH;
			break;
		case SOUTH:
			data |= GATE_WEST;
			break;
		case WEST:
			data |= GATE_NORTH;
			break;
		case NORTH:
			data |= GATE_EAST;
			break;
		}

		setData(data);
	}

	public BlockFace getFacing()
	{
		switch(getData() & DIR_BIT)
		{
		case GATE_SOUTH:
			return BlockFace.EAST;
		case GATE_WEST:
			return BlockFace.SOUTH;
		case GATE_NORTH:
			return BlockFace.WEST;
		case GATE_EAST:
			return BlockFace.NORTH;
		}

		return BlockFace.EAST;
	}

	public boolean isOpen()
	{
		return (getData() & OPEN_BIT) > 0;
	}

	public void setOpen(boolean isOpen)
	{
		byte data = getData();

		if(isOpen)
		{
			data |= OPEN_BIT;
		}
		else
		{
			data &= ~OPEN_BIT;
		}

		setData(data);
	}

	@Override
	public String toString()
	{
		return (isOpen() ? "OPEN " : "CLOSED ") + " facing and opening " + getFacing();
	}

	@Override
	public Gate clone()
	{
		return (Gate) super.clone();
	}
}