package com.carpentersblocks.data;
import static net.minecraftforge.common.util.ForgeDirection.DOWN;
import static net.minecraftforge.common.util.ForgeDirection.EAST;
import static net.minecraftforge.common.util.ForgeDirection.NORTH;
import static net.minecraftforge.common.util.ForgeDirection.SOUTH;
import static net.minecraftforge.common.util.ForgeDirection.UP;
import static net.minecraftforge.common.util.ForgeDirection.WEST;
import java.util.ArrayList;
import java.util.List;
import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection;
import com.carpentersblocks.tileentity.TEBase;
import com.carpentersblocks.util.BlockProperties;
import com.carpentersblocks.util.ModLogger;
import com.carpentersblocks.util.registry.BlockRegistry;
import com.carpentersblocks.util.slope.SlopeType;
import com.carpentersblocks.util.slope.SlopeTypeFactory;
public class Slope {
public final static byte ID_WEDGE_SE = 0;
public final static byte ID_WEDGE_NW = 1;
public final static byte ID_WEDGE_NE = 2;
public final static byte ID_WEDGE_SW = 3;
public final static byte ID_WEDGE_NEG_N = 4;
public final static byte ID_WEDGE_NEG_S = 5;
public final static byte ID_WEDGE_NEG_W = 6;
public final static byte ID_WEDGE_NEG_E = 7;
public final static byte ID_WEDGE_POS_N = 8;
public final static byte ID_WEDGE_POS_S = 9;
public final static byte ID_WEDGE_POS_W = 10;
public final static byte ID_WEDGE_POS_E = 11;
public final static byte ID_WEDGE_INT_NEG_SE = 12;
public final static byte ID_WEDGE_INT_NEG_NW = 13;
public final static byte ID_WEDGE_INT_NEG_NE = 14;
public final static byte ID_WEDGE_INT_NEG_SW = 15;
public final static byte ID_WEDGE_INT_POS_SE = 16;
public final static byte ID_WEDGE_INT_POS_NW = 17;
public final static byte ID_WEDGE_INT_POS_NE = 18;
public final static byte ID_WEDGE_INT_POS_SW = 19;
public final static byte ID_WEDGE_EXT_NEG_SE = 20;
public final static byte ID_WEDGE_EXT_NEG_NW = 21;
public final static byte ID_WEDGE_EXT_NEG_NE = 22;
public final static byte ID_WEDGE_EXT_NEG_SW = 23;
public final static byte ID_WEDGE_EXT_POS_SE = 24;
public final static byte ID_WEDGE_EXT_POS_NW = 25;
public final static byte ID_WEDGE_EXT_POS_NE = 26;
public final static byte ID_WEDGE_EXT_POS_SW = 27;
public final static byte ID_OBL_INT_NEG_SE = 28;
public final static byte ID_OBL_INT_NEG_NW = 29;
public final static byte ID_OBL_INT_NEG_NE = 30;
public final static byte ID_OBL_INT_NEG_SW = 31;
public final static byte ID_OBL_INT_POS_SE = 32;
public final static byte ID_OBL_INT_POS_NW = 33;
public final static byte ID_OBL_INT_POS_NE = 34;
public final static byte ID_OBL_INT_POS_SW = 35;
public final static byte ID_OBL_EXT_NEG_SE = 36;
public final static byte ID_OBL_EXT_NEG_NW = 37;
public final static byte ID_OBL_EXT_NEG_NE = 38;
public final static byte ID_OBL_EXT_NEG_SW = 39;
public final static byte ID_OBL_EXT_POS_SE = 40;
public final static byte ID_OBL_EXT_POS_NW = 41;
public final static byte ID_OBL_EXT_POS_NE = 42;
public final static byte ID_OBL_EXT_POS_SW = 43;
public final static byte ID_PRISM_NEG = 44;
public final static byte ID_PRISM_POS = 45;
public final static byte ID_PRISM_1P_POS_N = 46;
public final static byte ID_PRISM_1P_POS_S = 47;
public final static byte ID_PRISM_1P_POS_W = 48;
public final static byte ID_PRISM_1P_POS_E = 49;
public final static byte ID_PRISM_2P_POS_NS = 50;
public final static byte ID_PRISM_2P_POS_WE = 51;
public final static byte ID_PRISM_2P_POS_SE = 52;
public final static byte ID_PRISM_2P_POS_NW = 53;
public final static byte ID_PRISM_2P_POS_NE = 54;
public final static byte ID_PRISM_2P_POS_SW = 55;
public final static byte ID_PRISM_3P_POS_NWE = 56;
public final static byte ID_PRISM_3P_POS_SWE = 57;
public final static byte ID_PRISM_3P_POS_NSW = 58;
public final static byte ID_PRISM_3P_POS_NSE = 59;
public final static byte ID_PRISM_POS_4P = 60;
public final static byte ID_PRISM_WEDGE_POS_N = 61;
public final static byte ID_PRISM_WEDGE_POS_S = 62;
public final static byte ID_PRISM_WEDGE_POS_W = 63;
public final static byte ID_PRISM_WEDGE_POS_E = 64;
private final static byte ROTATION_Y[][] = {
{
ID_WEDGE_NE, ID_WEDGE_SW, ID_WEDGE_NW, ID_WEDGE_SE, ID_WEDGE_NEG_W, ID_WEDGE_NEG_E, ID_WEDGE_NEG_S,
ID_WEDGE_NEG_N, ID_WEDGE_POS_W, ID_WEDGE_POS_E, ID_WEDGE_POS_S, ID_WEDGE_POS_N,
ID_WEDGE_INT_NEG_NE, ID_WEDGE_INT_NEG_SW, ID_WEDGE_INT_NEG_NW, ID_WEDGE_INT_NEG_SE,
ID_WEDGE_INT_POS_NE, ID_WEDGE_INT_POS_SW, ID_WEDGE_INT_POS_NW, ID_WEDGE_INT_POS_SE,
ID_WEDGE_EXT_NEG_NE, ID_WEDGE_EXT_NEG_SW, ID_WEDGE_EXT_NEG_NW, ID_WEDGE_EXT_NEG_SE,
ID_WEDGE_EXT_POS_NE, ID_WEDGE_EXT_POS_SW, ID_WEDGE_EXT_POS_NW, ID_WEDGE_EXT_POS_SE,
ID_OBL_INT_NEG_NE, ID_OBL_INT_NEG_SW, ID_OBL_INT_NEG_NW, ID_OBL_INT_NEG_SE,
ID_OBL_INT_POS_NE, ID_OBL_INT_POS_SW, ID_OBL_INT_POS_NW, ID_OBL_INT_POS_SE,
ID_OBL_EXT_NEG_NE, ID_OBL_EXT_NEG_SW, ID_OBL_EXT_NEG_NW, ID_OBL_EXT_NEG_SE,
ID_OBL_EXT_POS_NE, ID_OBL_EXT_POS_SW, ID_OBL_EXT_POS_NW, ID_OBL_EXT_POS_SE,
ID_PRISM_NEG, ID_PRISM_POS, ID_PRISM_1P_POS_W, ID_PRISM_1P_POS_E, ID_PRISM_1P_POS_S,
ID_PRISM_1P_POS_N, ID_PRISM_2P_POS_WE, ID_PRISM_2P_POS_NS, ID_PRISM_2P_POS_NE,
ID_PRISM_2P_POS_SW, ID_PRISM_2P_POS_NW, ID_PRISM_2P_POS_SE, ID_PRISM_3P_POS_NSW,
ID_PRISM_3P_POS_NSE, ID_PRISM_3P_POS_SWE, ID_PRISM_3P_POS_NWE, ID_PRISM_POS_4P,
ID_PRISM_WEDGE_POS_W, ID_PRISM_WEDGE_POS_E, ID_PRISM_WEDGE_POS_S, ID_PRISM_WEDGE_POS_N
},
{
ID_WEDGE_SW, ID_WEDGE_NE, ID_WEDGE_SE, ID_WEDGE_NW, ID_WEDGE_NEG_E, ID_WEDGE_NEG_W, ID_WEDGE_NEG_N,
ID_WEDGE_NEG_S, ID_WEDGE_POS_E, ID_WEDGE_POS_W, ID_WEDGE_POS_N, ID_WEDGE_POS_S,
ID_WEDGE_INT_NEG_SW, ID_WEDGE_INT_NEG_NE, ID_WEDGE_INT_NEG_SE, ID_WEDGE_INT_NEG_NW,
ID_WEDGE_INT_POS_SW, ID_WEDGE_INT_POS_NE, ID_WEDGE_INT_POS_SE, ID_WEDGE_INT_POS_NW,
ID_WEDGE_EXT_NEG_SW, ID_WEDGE_EXT_NEG_NE, ID_WEDGE_EXT_NEG_SE, ID_WEDGE_EXT_NEG_NW,
ID_WEDGE_EXT_POS_SW, ID_WEDGE_EXT_POS_NE, ID_WEDGE_EXT_POS_SE, ID_WEDGE_EXT_POS_NW,
ID_OBL_INT_NEG_SW, ID_OBL_INT_NEG_NE, ID_OBL_INT_NEG_SE, ID_OBL_INT_NEG_NW,
ID_OBL_INT_POS_SW, ID_OBL_INT_POS_NE, ID_OBL_INT_POS_SE, ID_OBL_INT_POS_NW,
ID_OBL_EXT_NEG_SW, ID_OBL_EXT_NEG_NE, ID_OBL_EXT_NEG_SE, ID_OBL_EXT_NEG_NW,
ID_OBL_EXT_POS_SW, ID_OBL_EXT_POS_NE, ID_OBL_EXT_POS_SE, ID_OBL_EXT_POS_NW,
ID_PRISM_NEG, ID_PRISM_POS, ID_PRISM_1P_POS_E, ID_PRISM_1P_POS_W, ID_PRISM_1P_POS_N,
ID_PRISM_1P_POS_S, ID_PRISM_2P_POS_WE, ID_PRISM_2P_POS_NS, ID_PRISM_2P_POS_SW,
ID_PRISM_2P_POS_NE, ID_PRISM_2P_POS_SE, ID_PRISM_2P_POS_NW, ID_PRISM_3P_POS_NSE,
ID_PRISM_3P_POS_NSW, ID_PRISM_3P_POS_NWE, ID_PRISM_3P_POS_SWE, ID_PRISM_POS_4P,
ID_PRISM_WEDGE_POS_E, ID_PRISM_WEDGE_POS_W, ID_PRISM_WEDGE_POS_N, ID_PRISM_WEDGE_POS_S
}
};
public enum Type
{
WEDGE_SIDE,
WEDGE,
WEDGE_INT,
WEDGE_EXT,
OBLIQUE_INT,
OBLIQUE_EXT,
PRISM,
PRISM_1P,
PRISM_2P,
PRISM_3P,
PRISM_4P,
PRISM_WEDGE
}
public enum Face
{
NONE,
FULL,
WEDGE,
TRIANGLE
}
/*
* These represent the primary corner of the face shape.
* 0 means no face.
*/
public final static byte XYNN = 1;
public final static byte XYNP = 2;
public final static byte XYPN = 3;
public final static byte XYPP = 4;
/** Array containing registered slopes. */
private static final Slope[] slopesList = new Slope[65];
/** ID of the slope. */
public final int slopeID;
/** Class SlopeType **/
public final SlopeType slopeType;
/** Slope type. */
public final Type type;
/**
* Holds slope face shape.
*
* [DOWN, UP, NORTH, SOUTH, WEST, EAST]
*/
private final Face[] face;
/**
* If faceShape indicates side is WEDGE,
* this will indicate which corner of face
* is the "corner."
*
* This is used for side render checks.
*
* Stores MIN/MAX of wedge corner.
* Stored as [X/Y], [Z/Y], or [X/Z].
*
* [DOWN, UP, NORTH, SOUTH, WEST, EAST]
*/
private final int[] faceBias;
/**
* Is the slope facing up.
* A quick reference since it's called often.
*/
public final boolean isPositive;
/**
* For most slopes, this aids in auto-transformation code.
* For prism slopes, this aids in rendering the slopes.
*/
public final List<ForgeDirection> facings;
private Slope(int slopeID, Type slopeType, ForgeDirection[] facings, Face[] faceShape, int[] faceBias)
{
this.slopeID = slopeID;
slopesList[slopeID] = this;
type = slopeType;
this.slopeType = SlopeTypeFactory.getInstance().getSlope(type);
face = faceShape;
this.faceBias = faceBias;
this.facings = new ArrayList<ForgeDirection>();
for (ForgeDirection face : facings) {
this.facings.add(face);
}
isPositive = this.facings.contains(UP);
}
public static final Slope WEDGE_NW = new Slope(ID_WEDGE_NW, Type.WEDGE_SIDE, new ForgeDirection[] { NORTH, WEST }, new Face[] { Face.WEDGE, Face.WEDGE, Face.NONE, Face.FULL, Face.NONE, Face.FULL }, new int[] { XYPP, XYPP, 0, 0, 0, 0 });
public static final Slope WEDGE_NE = new Slope(ID_WEDGE_NE, Type.WEDGE_SIDE, new ForgeDirection[] { NORTH, EAST }, new Face[] { Face.WEDGE, Face.WEDGE, Face.NONE, Face.FULL, Face.FULL, Face.NONE }, new int[] { XYNP, XYNP, 0, 0, 0, 0 });
public static final Slope WEDGE_SW = new Slope(ID_WEDGE_SW, Type.WEDGE_SIDE, new ForgeDirection[] { SOUTH, WEST }, new Face[] { Face.WEDGE, Face.WEDGE, Face.FULL, Face.NONE, Face.NONE, Face.FULL }, new int[] { XYPN, XYPN, 0, 0, 0, 0 });
public static final Slope WEDGE_SE = new Slope(ID_WEDGE_SE, Type.WEDGE_SIDE, new ForgeDirection[] { SOUTH, EAST }, new Face[] { Face.WEDGE, Face.WEDGE, Face.FULL, Face.NONE, Face.FULL, Face.NONE }, new int[] { XYNN, XYNN, 0, 0, 0, 0 });
public static final Slope WEDGE_NEG_N = new Slope(ID_WEDGE_NEG_N, Type.WEDGE, new ForgeDirection[] { DOWN, NORTH }, new Face[] { Face.NONE, Face.FULL, Face.NONE, Face.FULL, Face.WEDGE, Face.WEDGE }, new int[] { 0, 0, 0, 0, XYPP, XYPP });
public static final Slope WEDGE_NEG_S = new Slope(ID_WEDGE_NEG_S, Type.WEDGE, new ForgeDirection[] { DOWN, SOUTH }, new Face[] { Face.NONE, Face.FULL, Face.FULL, Face.NONE, Face.WEDGE, Face.WEDGE }, new int[] { 0, 0, 0, 0, XYNP, XYNP });
public static final Slope WEDGE_NEG_W = new Slope(ID_WEDGE_NEG_W, Type.WEDGE, new ForgeDirection[] { DOWN, WEST }, new Face[] { Face.NONE, Face.FULL, Face.WEDGE, Face.WEDGE, Face.NONE, Face.FULL }, new int[] { 0, 0, XYPP, XYPP, 0, 0 });
public static final Slope WEDGE_NEG_E = new Slope(ID_WEDGE_NEG_E, Type.WEDGE, new ForgeDirection[] { DOWN, EAST }, new Face[] { Face.NONE, Face.FULL, Face.WEDGE, Face.WEDGE, Face.FULL, Face.NONE }, new int[] { 0, 0, XYNP, XYNP, 0, 0 });
public static final Slope WEDGE_POS_N = new Slope(ID_WEDGE_POS_N, Type.WEDGE, new ForgeDirection[] { UP, NORTH }, new Face[] { Face.FULL, Face.NONE, Face.NONE, Face.FULL, Face.WEDGE, Face.WEDGE }, new int[] { 0, 0, 0, 0, XYPN, XYPN });
public static final Slope WEDGE_POS_S = new Slope(ID_WEDGE_POS_S, Type.WEDGE, new ForgeDirection[] { UP, SOUTH }, new Face[] { Face.FULL, Face.NONE, Face.FULL, Face.NONE, Face.WEDGE, Face.WEDGE }, new int[] { 0, 0, 0, 0, XYNN, XYNN });
public static final Slope WEDGE_POS_W = new Slope(ID_WEDGE_POS_W, Type.WEDGE, new ForgeDirection[] { UP, WEST }, new Face[] { Face.FULL, Face.NONE, Face.WEDGE, Face.WEDGE, Face.NONE, Face.FULL }, new int[] { 0, 0, XYPN, XYPN, 0, 0 });
public static final Slope WEDGE_POS_E = new Slope(ID_WEDGE_POS_E, Type.WEDGE, new ForgeDirection[] { UP, EAST }, new Face[] { Face.FULL, Face.NONE, Face.WEDGE, Face.WEDGE, Face.FULL, Face.NONE }, new int[] { 0, 0, XYNN, XYNN, 0, 0 });
public static final Slope WEDGE_INT_NEG_NW = new Slope(ID_WEDGE_INT_NEG_NW, Type.WEDGE_INT, new ForgeDirection[] { DOWN, NORTH, WEST }, new Face[] { Face.NONE, Face.FULL, Face.WEDGE, Face.FULL, Face.WEDGE, Face.FULL }, new int[] { 0, 0, XYPP, 0, XYPP, 0 });
public static final Slope WEDGE_INT_NEG_NE = new Slope(ID_WEDGE_INT_NEG_NE, Type.WEDGE_INT, new ForgeDirection[] { DOWN, NORTH, EAST }, new Face[] { Face.NONE, Face.FULL, Face.WEDGE, Face.FULL, Face.FULL, Face.WEDGE }, new int[] { 0, 0, XYNP, 0, 0, XYPP });
public static final Slope WEDGE_INT_NEG_SW = new Slope(ID_WEDGE_INT_NEG_SW, Type.WEDGE_INT, new ForgeDirection[] { DOWN, SOUTH, WEST }, new Face[] { Face.NONE, Face.FULL, Face.FULL, Face.WEDGE, Face.WEDGE, Face.FULL }, new int[] { 0, 0, 0, XYPP, XYNP, 0 });
public static final Slope WEDGE_INT_NEG_SE = new Slope(ID_WEDGE_INT_NEG_SE, Type.WEDGE_INT, new ForgeDirection[] { DOWN, SOUTH, EAST }, new Face[] { Face.NONE, Face.FULL, Face.FULL, Face.WEDGE, Face.FULL, Face.WEDGE }, new int[] { 0, 0, 0, XYNP, 0, XYNP });
public static final Slope WEDGE_INT_POS_NW = new Slope(ID_WEDGE_INT_POS_NW, Type.WEDGE_INT, new ForgeDirection[] { UP, NORTH, WEST }, new Face[] { Face.FULL, Face.NONE, Face.WEDGE, Face.FULL, Face.WEDGE, Face.FULL }, new int[] { 0, 0, XYPN, 0, XYPN, 0 });
public static final Slope WEDGE_INT_POS_NE = new Slope(ID_WEDGE_INT_POS_NE, Type.WEDGE_INT, new ForgeDirection[] { UP, NORTH, EAST }, new Face[] { Face.FULL, Face.NONE, Face.WEDGE, Face.FULL, Face.FULL, Face.WEDGE }, new int[] { 0, 0, XYNN, 0, 0, XYPN });
public static final Slope WEDGE_INT_POS_SW = new Slope(ID_WEDGE_INT_POS_SW, Type.WEDGE_INT, new ForgeDirection[] { UP, SOUTH, WEST }, new Face[] { Face.FULL, Face.NONE, Face.FULL, Face.WEDGE, Face.WEDGE, Face.FULL }, new int[] { 0, 0, 0, XYPN, XYNN, 0 });
public static final Slope WEDGE_INT_POS_SE = new Slope(ID_WEDGE_INT_POS_SE, Type.WEDGE_INT, new ForgeDirection[] { UP, SOUTH, EAST }, new Face[] { Face.FULL, Face.NONE, Face.FULL, Face.WEDGE, Face.FULL, Face.WEDGE }, new int[] { 0, 0, 0, XYNN, 0, XYNN });
public static final Slope WEDGE_EXT_NEG_NW = new Slope(ID_WEDGE_EXT_NEG_NW, Type.WEDGE_EXT, new ForgeDirection[] { DOWN, NORTH, WEST }, new Face[] { Face.NONE, Face.FULL, Face.NONE, Face.WEDGE, Face.NONE, Face.WEDGE }, new int[] { 0, 0, 0, XYPP, 0, XYPP });
public static final Slope WEDGE_EXT_NEG_NE = new Slope(ID_WEDGE_EXT_NEG_NE, Type.WEDGE_EXT, new ForgeDirection[] { DOWN, NORTH, EAST }, new Face[] { Face.NONE, Face.FULL, Face.NONE, Face.WEDGE, Face.WEDGE, Face.NONE }, new int[] { 0, 0, 0, XYNP, XYPP, 0 });
public static final Slope WEDGE_EXT_NEG_SW = new Slope(ID_WEDGE_EXT_NEG_SW, Type.WEDGE_EXT, new ForgeDirection[] { DOWN, SOUTH, WEST }, new Face[] { Face.NONE, Face.FULL, Face.WEDGE, Face.NONE, Face.NONE, Face.WEDGE }, new int[] { 0, 0, XYPP, 0, 0, XYNP });
public static final Slope WEDGE_EXT_NEG_SE = new Slope(ID_WEDGE_EXT_NEG_SE, Type.WEDGE_EXT, new ForgeDirection[] { DOWN, SOUTH, EAST }, new Face[] { Face.NONE, Face.FULL, Face.WEDGE, Face.NONE, Face.WEDGE, Face.NONE }, new int[] { 0, 0, XYNP, 0, XYNP, 0 });
public static final Slope WEDGE_EXT_POS_NW = new Slope(ID_WEDGE_EXT_POS_NW, Type.WEDGE_EXT, new ForgeDirection[] { UP, NORTH, WEST }, new Face[] { Face.FULL, Face.NONE, Face.NONE, Face.WEDGE, Face.NONE, Face.WEDGE }, new int[] { 0, 0, 0, XYPN, 0, XYPN });
public static final Slope WEDGE_EXT_POS_NE = new Slope(ID_WEDGE_EXT_POS_NE, Type.WEDGE_EXT, new ForgeDirection[] { UP, NORTH, EAST }, new Face[] { Face.FULL, Face.NONE, Face.NONE, Face.WEDGE, Face.WEDGE, Face.NONE }, new int[] { 0, 0, 0, XYNN, XYPN, 0 });
public static final Slope WEDGE_EXT_POS_SW = new Slope(ID_WEDGE_EXT_POS_SW, Type.WEDGE_EXT, new ForgeDirection[] { UP, SOUTH, WEST }, new Face[] { Face.FULL, Face.NONE, Face.WEDGE, Face.NONE, Face.NONE, Face.WEDGE }, new int[] { 0, 0, XYPN, 0, 0, XYNN });
public static final Slope WEDGE_EXT_POS_SE = new Slope(ID_WEDGE_EXT_POS_SE, Type.WEDGE_EXT, new ForgeDirection[] { UP, SOUTH, EAST }, new Face[] { Face.FULL, Face.NONE, Face.WEDGE, Face.NONE, Face.WEDGE, Face.NONE }, new int[] { 0, 0, XYNN, 0, XYNN, 0 });
public static final Slope OBL_INT_NEG_NW = new Slope(ID_OBL_INT_NEG_NW, Type.OBLIQUE_INT, new ForgeDirection[] { DOWN, NORTH, WEST }, new Face[] { Face.WEDGE, Face.FULL, Face.WEDGE, Face.FULL, Face.WEDGE, Face.FULL }, new int[] { XYPP, 0, XYPP, 0, XYPP, 0 });
public static final Slope OBL_INT_NEG_NE = new Slope(ID_OBL_INT_NEG_NE, Type.OBLIQUE_INT, new ForgeDirection[] { DOWN, NORTH, EAST }, new Face[] { Face.WEDGE, Face.FULL, Face.WEDGE, Face.FULL, Face.FULL, Face.WEDGE }, new int[] { XYNP, 0, XYNP, 0, 0, XYPP });
public static final Slope OBL_INT_NEG_SW = new Slope(ID_OBL_INT_NEG_SW, Type.OBLIQUE_INT, new ForgeDirection[] { DOWN, SOUTH, WEST }, new Face[] { Face.WEDGE, Face.FULL, Face.FULL, Face.WEDGE, Face.WEDGE, Face.FULL }, new int[] { XYPN, 0, 0, XYPP, XYNP, 0 });
public static final Slope OBL_INT_NEG_SE = new Slope(ID_OBL_INT_NEG_SE, Type.OBLIQUE_INT, new ForgeDirection[] { DOWN, SOUTH, EAST }, new Face[] { Face.WEDGE, Face.FULL, Face.FULL, Face.WEDGE, Face.FULL, Face.WEDGE }, new int[] { XYNN, 0, 0, XYNP, 0, XYNP });
public static final Slope OBL_INT_POS_NW = new Slope(ID_OBL_INT_POS_NW, Type.OBLIQUE_INT, new ForgeDirection[] { UP, NORTH, WEST }, new Face[] { Face.FULL, Face.WEDGE, Face.WEDGE, Face.FULL, Face.WEDGE, Face.FULL }, new int[] { 0, XYPP, XYPN, 0, XYPN, 0 });
public static final Slope OBL_INT_POS_NE = new Slope(ID_OBL_INT_POS_NE, Type.OBLIQUE_INT, new ForgeDirection[] { UP, NORTH, EAST }, new Face[] { Face.FULL, Face.WEDGE, Face.WEDGE, Face.FULL, Face.FULL, Face.WEDGE }, new int[] { 0, XYNP, XYNN, 0, 0, XYPN });
public static final Slope OBL_INT_POS_SW = new Slope(ID_OBL_INT_POS_SW, Type.OBLIQUE_INT, new ForgeDirection[] { UP, SOUTH, WEST }, new Face[] { Face.FULL, Face.WEDGE, Face.FULL, Face.WEDGE, Face.WEDGE, Face.FULL }, new int[] { 0, XYPN, 0, XYPN, XYNN, 0 });
public static final Slope OBL_INT_POS_SE = new Slope(ID_OBL_INT_POS_SE, Type.OBLIQUE_INT, new ForgeDirection[] { UP, SOUTH, EAST }, new Face[] { Face.FULL, Face.WEDGE, Face.FULL, Face.WEDGE, Face.FULL, Face.WEDGE }, new int[] { 0, XYNN, 0, XYNN, 0, XYNN });
public static final Slope OBL_EXT_NEG_NW = new Slope(ID_OBL_EXT_NEG_NW, Type.OBLIQUE_EXT, new ForgeDirection[] { DOWN, NORTH, WEST }, new Face[] { Face.NONE, Face.WEDGE, Face.NONE, Face.WEDGE, Face.NONE, Face.WEDGE }, new int[] { 0, XYPP, 0, XYPP, 0, XYPP });
public static final Slope OBL_EXT_NEG_NE = new Slope(ID_OBL_EXT_NEG_NE, Type.OBLIQUE_EXT, new ForgeDirection[] { DOWN, NORTH, EAST }, new Face[] { Face.NONE, Face.WEDGE, Face.NONE, Face.WEDGE, Face.WEDGE, Face.NONE }, new int[] { 0, XYNP, 0, XYNP, XYPP, 0 });
public static final Slope OBL_EXT_NEG_SW = new Slope(ID_OBL_EXT_NEG_SW, Type.OBLIQUE_EXT, new ForgeDirection[] { DOWN, SOUTH, WEST }, new Face[] { Face.NONE, Face.WEDGE, Face.WEDGE, Face.NONE, Face.NONE, Face.WEDGE }, new int[] { 0, XYPN, XYPP, 0, 0, XYNP });
public static final Slope OBL_EXT_NEG_SE = new Slope(ID_OBL_EXT_NEG_SE, Type.OBLIQUE_EXT, new ForgeDirection[] { DOWN, SOUTH, EAST }, new Face[] { Face.NONE, Face.WEDGE, Face.WEDGE, Face.NONE, Face.WEDGE, Face.NONE }, new int[] { 0, XYNN, XYNP, 0, XYNP, 0 });
public static final Slope OBL_EXT_POS_NW = new Slope(ID_OBL_EXT_POS_NW, Type.OBLIQUE_EXT, new ForgeDirection[] { UP, NORTH, WEST }, new Face[] { Face.WEDGE, Face.NONE, Face.NONE, Face.WEDGE, Face.NONE, Face.WEDGE }, new int[] { XYPP, 0, 0, XYPN, 0, XYPN });
public static final Slope OBL_EXT_POS_NE = new Slope(ID_OBL_EXT_POS_NE, Type.OBLIQUE_EXT, new ForgeDirection[] { UP, NORTH, EAST }, new Face[] { Face.WEDGE, Face.NONE, Face.NONE, Face.WEDGE, Face.WEDGE, Face.NONE }, new int[] { XYNP, 0, 0, XYNN, XYPN, 0 });
public static final Slope OBL_EXT_POS_SW = new Slope(ID_OBL_EXT_POS_SW, Type.OBLIQUE_EXT, new ForgeDirection[] { UP, SOUTH, WEST }, new Face[] { Face.WEDGE, Face.NONE, Face.WEDGE, Face.NONE, Face.NONE, Face.WEDGE }, new int[] { XYPN, 0, XYPN, 0, 0, XYNN });
public static final Slope OBL_EXT_POS_SE = new Slope(ID_OBL_EXT_POS_SE, Type.OBLIQUE_EXT, new ForgeDirection[] { UP, SOUTH, EAST }, new Face[] { Face.WEDGE, Face.NONE, Face.WEDGE, Face.NONE, Face.WEDGE, Face.NONE }, new int[] { XYNN, 0, XYNN, 0, XYNN, 0 });
public static final Slope PRISM_NEG = new Slope(ID_PRISM_NEG, Type.PRISM, new ForgeDirection[] { DOWN }, new Face[] { Face.NONE, Face.FULL, Face.NONE, Face.NONE, Face.NONE, Face.NONE }, new int[] { 0, 0, 0, 0, 0, 0 });
public static final Slope PRISM_POS = new Slope(ID_PRISM_POS, Type.PRISM, new ForgeDirection[] { UP }, new Face[] { Face.FULL, Face.NONE, Face.NONE, Face.NONE, Face.NONE, Face.NONE }, new int[] { 0, 0, 0, 0, 0, 0 });
public static final Slope PRISM_1P_POS_N = new Slope(ID_PRISM_1P_POS_N, Type.PRISM_1P, new ForgeDirection[] { UP, NORTH }, new Face[] { Face.FULL, Face.NONE, Face.TRIANGLE, Face.NONE, Face.NONE, Face.NONE }, new int[] { 0, 0, 0, 0, 0, 0 });
public static final Slope PRISM_1P_POS_S = new Slope(ID_PRISM_1P_POS_S, Type.PRISM_1P, new ForgeDirection[] { UP, SOUTH }, new Face[] { Face.FULL, Face.NONE, Face.NONE, Face.TRIANGLE, Face.NONE, Face.NONE }, new int[] { 0, 0, 0, 0, 0, 0 });
public static final Slope PRISM_1P_POS_W = new Slope(ID_PRISM_1P_POS_W, Type.PRISM_1P, new ForgeDirection[] { UP, WEST }, new Face[] { Face.FULL, Face.NONE, Face.NONE, Face.NONE, Face.TRIANGLE, Face.NONE }, new int[] { 0, 0, 0, 0, 0, 0 });
public static final Slope PRISM_1P_POS_E = new Slope(ID_PRISM_1P_POS_E, Type.PRISM_1P, new ForgeDirection[] { UP, EAST }, new Face[] { Face.FULL, Face.NONE, Face.NONE, Face.NONE, Face.NONE, Face.TRIANGLE }, new int[] { 0, 0, 0, 0, 0, 0 });
public static final Slope PRISM_2P_POS_NS = new Slope(ID_PRISM_2P_POS_NS, Type.PRISM_2P, new ForgeDirection[] { UP, NORTH, SOUTH }, new Face[] { Face.FULL, Face.NONE, Face.TRIANGLE, Face.TRIANGLE, Face.NONE, Face.NONE }, new int[] { 0, 0, 0, 0, 0, 0 });
public static final Slope PRISM_2P_POS_WE = new Slope(ID_PRISM_2P_POS_WE, Type.PRISM_2P, new ForgeDirection[] { UP, WEST, EAST }, new Face[] { Face.FULL, Face.NONE, Face.NONE, Face.NONE, Face.TRIANGLE, Face.TRIANGLE }, new int[] { 0, 0, 0, 0, 0, 0 });
public static final Slope PRISM_2P_POS_SE = new Slope(ID_PRISM_2P_POS_SE, Type.PRISM_2P, new ForgeDirection[] { UP, SOUTH, EAST }, new Face[] { Face.FULL, Face.NONE, Face.NONE, Face.TRIANGLE, Face.NONE, Face.TRIANGLE }, new int[] { 0, 0, 0, 0, 0, 0 });
public static final Slope PRISM_2P_POS_NW = new Slope(ID_PRISM_2P_POS_NW, Type.PRISM_2P, new ForgeDirection[] { UP, NORTH, WEST }, new Face[] { Face.FULL, Face.NONE, Face.TRIANGLE, Face.NONE, Face.TRIANGLE, Face.NONE }, new int[] { 0, 0, 0, 0, 0, 0 });
public static final Slope PRISM_2P_POS_NE = new Slope(ID_PRISM_2P_POS_NE, Type.PRISM_2P, new ForgeDirection[] { UP, NORTH, EAST }, new Face[] { Face.FULL, Face.NONE, Face.TRIANGLE, Face.NONE, Face.NONE, Face.TRIANGLE }, new int[] { 0, 0, 0, 0, 0, 0 });
public static final Slope PRISM_2P_POS_SW = new Slope(ID_PRISM_2P_POS_SW, Type.PRISM_2P, new ForgeDirection[] { UP, SOUTH, WEST }, new Face[] { Face.FULL, Face.NONE, Face.NONE, Face.TRIANGLE, Face.TRIANGLE, Face.NONE }, new int[] { 0, 0, 0, 0, 0, 0 });
public static final Slope PRISM_3P_POS_WEN = new Slope(ID_PRISM_3P_POS_NWE, Type.PRISM_3P, new ForgeDirection[] { UP, NORTH, WEST, EAST }, new Face[] { Face.FULL, Face.NONE, Face.TRIANGLE, Face.NONE, Face.TRIANGLE, Face.TRIANGLE }, new int[] { 0, 0, 0, 0, 0, 0 });
public static final Slope PRISM_3P_POS_WES = new Slope(ID_PRISM_3P_POS_SWE, Type.PRISM_3P, new ForgeDirection[] { UP, SOUTH, WEST, EAST }, new Face[] { Face.FULL, Face.NONE, Face.NONE, Face.TRIANGLE, Face.TRIANGLE, Face.TRIANGLE }, new int[] { 0, 0, 0, 0, 0, 0 });
public static final Slope PRISM_3P_POS_NSW = new Slope(ID_PRISM_3P_POS_NSW, Type.PRISM_3P, new ForgeDirection[] { UP, NORTH, SOUTH, WEST }, new Face[] { Face.FULL, Face.NONE, Face.TRIANGLE, Face.TRIANGLE, Face.TRIANGLE, Face.NONE }, new int[] { 0, 0, 0, 0, 0, 0 });
public static final Slope PRISM_3P_POS_NSE = new Slope(ID_PRISM_3P_POS_NSE, Type.PRISM_3P, new ForgeDirection[] { UP, NORTH, SOUTH, EAST }, new Face[] { Face.FULL, Face.NONE, Face.TRIANGLE, Face.TRIANGLE, Face.NONE, Face.TRIANGLE }, new int[] { 0, 0, 0, 0, 0, 0 });
public static final Slope PRISM_4P_POS = new Slope(ID_PRISM_POS_4P, Type.PRISM_4P, new ForgeDirection[] { UP, NORTH, SOUTH, WEST, EAST }, new Face[] { Face.FULL, Face.NONE, Face.TRIANGLE, Face.TRIANGLE, Face.TRIANGLE, Face.TRIANGLE }, new int[] { 0, 0, 0, 0, 0, 0 });
public static final Slope PRISM_WEDGE_POS_N = new Slope(ID_PRISM_WEDGE_POS_N, Type.PRISM_WEDGE, new ForgeDirection[] { UP, NORTH }, new Face[] { Face.FULL, Face.NONE, Face.TRIANGLE, Face.FULL, Face.WEDGE, Face.WEDGE }, new int[] { 0, 0, 0, 0, XYPN, XYPN });
public static final Slope PRISM_WEDGE_POS_S = new Slope(ID_PRISM_WEDGE_POS_S, Type.PRISM_WEDGE, new ForgeDirection[] { UP, SOUTH }, new Face[] { Face.FULL, Face.NONE, Face.FULL, Face.TRIANGLE, Face.WEDGE, Face.WEDGE }, new int[] { 0, 0, 0, 0, XYNN, XYNN });
public static final Slope PRISM_WEDGE_POS_W = new Slope(ID_PRISM_WEDGE_POS_W, Type.PRISM_WEDGE, new ForgeDirection[] { UP, WEST }, new Face[] { Face.FULL, Face.NONE, Face.WEDGE, Face.WEDGE, Face.TRIANGLE, Face.FULL }, new int[] { 0, 0, XYPN, XYPN, 0, 0 });
public static final Slope PRISM_WEDGE_POS_E = new Slope(ID_PRISM_WEDGE_POS_E, Type.PRISM_WEDGE, new ForgeDirection[] { UP, EAST }, new Face[] { Face.FULL, Face.NONE, Face.WEDGE, Face.WEDGE, Face.FULL, Face.TRIANGLE }, new int[] { 0, 0, XYNN, XYNN, 0, 0 });
/**
* Returns primary slope type.
* Used when slopes share common attributes.
*/
public Type getPrimaryType()
{
switch (type) {
case PRISM:
case PRISM_1P:
case PRISM_2P:
case PRISM_3P:
case PRISM_4P:
return Type.PRISM;
default:
return type;
}
}
public Face getFace(ForgeDirection side)
{
return face[side.ordinal()];
}
public boolean isFaceFull(ForgeDirection side)
{
return face[side.ordinal()] == Face.FULL;
}
public boolean hasSide(ForgeDirection side)
{
return face[side.ordinal()] != Face.NONE;
}
public int getFaceBias(ForgeDirection side)
{
return faceBias[side.ordinal()];
}
public static Slope getSlope(TEBase TE)
{
int slopeID = TE.getData();
if (slopeID >= slopesList.length) {
ModLogger.info("Detected abnormal slope data, adjusting to safe value.");
TE.setData(slopeID = 0);
}
return slopesList[slopeID];
}
public static Slope getSlopeById(int slopeID)
{
if (slopeID >= slopesList.length) {
slopeID = 0;
}
return slopesList[slopeID];
}
public static boolean rotate(World world, int x, int y, int z, ForgeDirection axis)
{
TEBase TE = BlockProperties.getTileEntity(BlockRegistry.blockCarpentersSlope, world, x, y, z);
if (TE != null)
{
int data = TE.getData();
// Detect unsupported rotation axis
if (axis.offsetY == 0) {
return false;
}
// Detect abnormal slope data
if (data >= slopesList.length) {
ModLogger.info("Detected abnormal slope data at (%d,%d,%d), resetting to default.", x, y, z);
TE.setData(0);
return false;
}
int newData = Slope.ROTATION_Y[axis.ordinal()][data];
TE.setData(newData);
return true;
}
return false;
}
}