Newer
Older
ultramine_bukkit / src / test / java / org / ultramine / libtest / BlockPos.java
package org.ultramine.libtest;

import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.ChunkPosition;
import net.minecraftforge.common.util.ForgeDirection;
import org.bukkit.util.Vector;

import javax.annotation.Nonnull;

public class BlockPos
{
	public static final BlockPos ZERO = new BlockPos(0, 0, 0);

	private final int x;
	private final int y;
	private final int z;

	public BlockPos(int x, int y, int z)
	{
		this.x = x;
		this.y = y;
		this.z = z;
	}

	public int getX()
	{
		return x;
	}

	public int getY()
	{
		return y;
	}

	public int getZ()
	{
		return z;
	}

	@Nonnull
	public BlockPos step(ForgeDirection d)
	{
		return new BlockPos(x + d.offsetX, y + d.offsetY, z + d.offsetZ);
	}

	@Nonnull
	public BlockPos stepBack(ForgeDirection d)
	{
		return new BlockPos(x - d.offsetX, y - d.offsetY, z - d.offsetZ);
	}

	public boolean isInAABB(BlockPos min, BlockPos max)
	{
		return x >= min.getX() && x <= max.getX() && y >= min.getY() && y <= max.getY() && z >= min.getZ() && z <= max.getZ();
	}

	@Nonnull
	public static BlockPos fromChunkPosition(ChunkPosition block)
	{
		return new BlockPos(block.chunkPosX, block.chunkPosY, block.chunkPosZ);
	}

	@Nonnull
	public static BlockPos fromTileEntity(TileEntity block)
	{
		return new BlockPos(block.xCoord, block.yCoord, block.zCoord);
	}

	@Nonnull
	public Vector toVector()
	{
		return new Vector(x, y, z);
	}

	@Override
	public boolean equals(Object o)
	{
		if(this == o) return true;
		if(o == null || getClass() != o.getClass()) return false;

		BlockPos blockPos = (BlockPos) o;

		return x == blockPos.x && y == blockPos.y && z == blockPos.z;
	}

	@Override
	public int hashCode()
	{
		int result = x;
		result = 31 * result + y;
		result = 31 * result + z;
		return result;
	}

	@Override
	public String toString()
	{
		return "BlockPos(" + x + ", " + y + ", " + z + ")";
	}
}