001 package net.minecraftforge.common; 002 003 public enum ForgeDirection 004 { 005 /** -Y */ 006 DOWN(0, -1, 0), 007 008 /** +Y */ 009 UP(0, 1, 0), 010 011 /** -Z */ 012 NORTH(0, 0, -1), 013 014 /** +Z */ 015 SOUTH(0, 0, 1), 016 017 /** -X */ 018 WEST(-1, 0, 0), 019 020 /** +X */ 021 EAST(1, 0, 0), 022 023 /** 024 * Used only by getOrientation, for invalid inputs 025 */ 026 UNKNOWN(0, 0, 0); 027 028 public final int offsetX; 029 public final int offsetY; 030 public final int offsetZ; 031 public final int flag; 032 public static final ForgeDirection[] VALID_DIRECTIONS = {DOWN, UP, NORTH, SOUTH, WEST, EAST}; 033 public static final int[] OPPOSITES = {1, 0, 3, 2, 5, 4, 6}; 034 public static final int[] TO_LEFT = {0, 1, 5, 4, 3, 2, 6}; 035 036 private ForgeDirection(int x, int y, int z) 037 { 038 offsetX = x; 039 offsetY = y; 040 offsetZ = z; 041 flag = 1 << ordinal(); 042 } 043 044 public static ForgeDirection getOrientation(int id) 045 { 046 if (id >= 0 && id < VALID_DIRECTIONS.length) 047 { 048 return VALID_DIRECTIONS[id]; 049 } 050 return UNKNOWN; 051 } 052 053 public ForgeDirection getOpposite() 054 { 055 return getOrientation(OPPOSITES[ordinal()]); 056 } 057 058 public ForgeDirection getLeftRotation() 059 { 060 return getOrientation(TO_LEFT[ordinal()]); 061 } 062 }