package net.minecraftforge.common;

public enum ForgeDirection
{
    /** -Y */
    DOWN(0, -1, 0), 
    
    /** +Y */
    UP(0, 1, 0),
    
    /** -Z */
    NORTH(0, 0, -1),
    
    /** +Z */
    SOUTH(0, 0, 1),
    
    /** -X */
    WEST(-1, 0, 0),
    
    /** +X */
    EAST(1, 0, 0),
    
    /** 
     * Used only by getOrientation, for invalid inputs
     */
    UNKNOWN(0, 0, 0);

    public final int offsetX;
    public final int offsetY;
    public final int offsetZ;
    public final int flag;
    public static final ForgeDirection[] VALID_DIRECTIONS = {DOWN, UP, NORTH, SOUTH, WEST, EAST};
    public static final int[] opposite = {1, 0, 3, 2, 5, 4, 6};

    private ForgeDirection(int x, int y, int z)
    {
        offsetX = x;
        offsetY = y;
        offsetZ = z;
        flag = 1 << ordinal();
    }

    public static ForgeDirection getOrientation(int id)
    {
        if (id >= 0 && id < VALID_DIRECTIONS.length)
        {
            return VALID_DIRECTIONS[id];
        }
        return UNKNOWN;
    }

    public ForgeDirection getOpposite()
    {
        return getOrientation(opposite[ordinal()]);
    }
}

@@ -91,22 +91,17 @@
  -1, 0),
- %0A    
+%0A
 %0A    /**
@@ -120,29 +120,25 @@
 P(0, 1, 0),%0A
-    
 %0A
+
     /** -Z *
@@ -156,29 +156,25 @@
 (0, 0, -1),%0A
-    
 %0A
+
     /** +Z *
@@ -195,21 +195,17 @@
  0, 1),%0A
-    
 %0A
+
     /** 
@@ -222,37 +222,33 @@
 WEST(-1, 0, 0),%0A
-    
 %0A
+
     /** +X */%0A  
@@ -268,20 +268,16 @@
 0),%0A
-    
 %0A    /**
  %0A  
@@ -272,17 +272,16 @@
 %0A    /**
- 
 %0A     * 
@@ -637,16 +637,78 @@
 , 4, 6%7D;
+%0A    public static final int%5B%5D toLeft = %7B0, 1, 5, 4, 3, 2, 6%7D;
 %0A%0A    pr
@@ -1101,32 +1101,32 @@
 pposite()%0A    %7B%0A
-
         return g
@@ -1166,11 +1166,115 @@
 );%0A    %7D
+%0A%0A    public ForgeDirection getLeftRotation()%0A    %7B%0A    %09return getOrientation(toLeft%5Bordinal()%5D);%0A    %7D
 %0A%7D%0A

Add toLeft rotational data to ForgeDirection