public Direction getInverse() { int inverseDir = dir - getSign(); for (Direction direction : Direction.values()) { if (direction.dir == inverseDir) { return direction; } } return this; }
/** 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(); }
static { for (Direction dir : Direction.values()) { DIRECTION_MAP.put(dir.toForgeDirection(), dir); } }