|  | package ic2.api; | 
|  |  | 
|  | import net.minecraft.tileentity.TileEntity; | 
|  |  | 
|  | import net.minecraftforge.common.ForgeDirection; | 
|  |  | 
|  | /** | 
|  | * Represents the 6 possible directions along the axis of a block. | 
|  | */ | 
|  | public enum Direction { | 
|  | /** | 
|  | * -X | 
|  | */ | 
|  | XN(0), | 
|  | /** | 
|  | * +X | 
|  | */ | 
|  | XP(1), | 
|  |  | 
|  | /** | 
|  | * -Y | 
|  | */ | 
|  | YN(2), //MC-Code starts with 0 here | 
|  | /** | 
|  | * +Y | 
|  | */ | 
|  | YP(3), // 1... | 
|  |  | 
|  | /** | 
|  | * -Z | 
|  | */ | 
|  | ZN(4), | 
|  | /** | 
|  | * +Z | 
|  | */ | 
|  | ZP(5); | 
|  |  | 
|  | Direction(int dir) { | 
|  | this.dir = dir; | 
|  | } | 
|  |  | 
|  | /*public CoordinateTuple ApplyToCoordinates(CoordinateTuple coordinates) { | 
|  | CoordinateTuple ret = new CoordinateTuple(coordinates); | 
|  |  | 
|  | ret.coords[dir/2] += GetSign(); | 
|  |  | 
|  | return ret; | 
|  | }*/ | 
|  |  | 
|  | /** | 
|  | * Get the tile entity next to a tile entity following this direction. | 
|  | * | 
|  | * @param tileEntity tile entity to check | 
|  | * @return Adjacent tile entity or null if none exists | 
|  | */ | 
|  | public TileEntity applyToTileEntity(TileEntity tileEntity) { | 
|  | int coords[] = { tileEntity.xCoord, tileEntity.yCoord, tileEntity.zCoord }; | 
|  |  | 
|  | coords[dir/2] += getSign(); | 
|  |  | 
|  | if (tileEntity.worldObj != null && tileEntity.worldObj.blockExists(coords[0], coords[1], coords[2])) { | 
|  | return tileEntity.worldObj.getBlockTileEntity(coords[0], coords[1], coords[2]); | 
|  | } else { | 
|  | return null; | 
|  | } | 
|  | } | 
|  |  | 
|  | /** | 
|  | * Get the inverse of this direction (XN -> XP, XP -> XN, etc.) | 
|  | * | 
|  | * @return Inverse direction | 
|  | */ | 
|  | public Direction getInverse() { | 
|  | int inverseDir = dir - getSign(); | 
|  |  | 
|  | for (Direction direction : directions) { | 
|  | if (direction.dir == inverseDir) return direction; | 
|  | } | 
|  |  | 
|  | return this; | 
|  | } | 
|  |  | 
|  | /** | 
|  | * Convert this direction to a Minecraft side value. | 
|  | * | 
|  | * @return Minecraft side value | 
|  | */ | 
|  | public int toSideValue() { | 
|  | return (dir + 4) % 6; | 
|  | } | 
|  |  | 
|  | /** | 
|  | * Determine direction sign (N for negative or P for positive). | 
|  | * | 
|  | * @return -1 if the direction is negative, +1 if the direction is positive | 
|  | */ | 
|  | private int getSign() { | 
|  | return (dir % 2) * 2 - 1; | 
|  | } | 
|  |  | 
|  | public ForgeDirection toForgeDirection() { | 
|  | return ForgeDirection.getOrientation(toSideValue()); | 
|  | } | 
|  |  | 
|  | private int dir; | 
|  | public static final Direction[] directions = Direction.values(); | 
|  | } | 
|  |  |