package com.carpentersblocks.util.stairs;
import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection;
import com.carpentersblocks.block.BlockCarpentersStairs;
import com.carpentersblocks.data.Stairs;
import com.carpentersblocks.data.Stairs.Type;
import com.carpentersblocks.tileentity.TEBase;
public class StairsTransform {
/**
* Transforms stairs to connect with adjacent stairs.
*/
public static int transformStairs(TEBase TE, int stairsID, int x, int y, int z)
{
World world = TE.getWorldObj();
Stairs stairs_XN = world.getBlock(x - 1, y, z) instanceof BlockCarpentersStairs ? Stairs.stairsList[((TEBase) world.getTileEntity(x - 1, y, z)).getData()] : null;
Stairs stairs_XP = world.getBlock(x + 1, y, z) instanceof BlockCarpentersStairs ? Stairs.stairsList[((TEBase) world.getTileEntity(x + 1, y, z)).getData()] : null;
Stairs stairs_YN = world.getBlock(x, y - 1, z) instanceof BlockCarpentersStairs ? Stairs.stairsList[((TEBase) world.getTileEntity(x, y - 1, z)).getData()] : null;
Stairs stairs_YP = world.getBlock(x, y + 1, z) instanceof BlockCarpentersStairs ? Stairs.stairsList[((TEBase) world.getTileEntity(x, y + 1, z)).getData()] : null;
Stairs stairs_ZN = world.getBlock(x, y, z - 1) instanceof BlockCarpentersStairs ? Stairs.stairsList[((TEBase) world.getTileEntity(x, y, z - 1)).getData()] : null;
Stairs stairs_ZP = world.getBlock(x, y, z + 1) instanceof BlockCarpentersStairs ? Stairs.stairsList[((TEBase) world.getTileEntity(x, y, z + 1)).getData()] : null;
/* Transform into normal side. */
if (stairs_YN != null) {
if (stairs_YN.stairsType.equals(Type.NORMAL_SIDE)) {
return stairs_YN.stairsID;
}
}
if (stairs_YP != null) {
if (stairs_YP.stairsType.equals(Type.NORMAL_SIDE)) {
return stairs_YP.stairsID;
}
}
/* Transform into normal corner. */
Stairs stairs = Stairs.stairsList[stairsID];
if (stairs_ZN != null) {
if (stairs_XN != null) {
if (stairs_ZN.facings.contains(ForgeDirection.WEST) && stairs_XN.facings.contains(ForgeDirection.NORTH)) {
return stairs_XN.isPositive && stairs_ZN.isPositive ? Stairs.ID_NORMAL_INT_POS_NW : Stairs.ID_NORMAL_INT_NEG_NW;
}
if (stairs_ZN.facings.contains(ForgeDirection.EAST) && stairs_XN.facings.contains(ForgeDirection.SOUTH)) {
return stairs_XN.isPositive && stairs_ZN.isPositive ? Stairs.ID_NORMAL_EXT_POS_SE : Stairs.ID_NORMAL_EXT_NEG_SE;
}
}
if (stairs_XP != null) {
if (stairs_ZN.facings.contains(ForgeDirection.EAST) && stairs_XP.facings.contains(ForgeDirection.NORTH)) {
return stairs_XP.isPositive && stairs_ZN.isPositive ? Stairs.ID_NORMAL_INT_POS_NE : Stairs.ID_NORMAL_INT_NEG_NE;
}
if (stairs_ZN.facings.contains(ForgeDirection.WEST) && stairs_XP.facings.contains(ForgeDirection.SOUTH)) {
return stairs_XP.isPositive && stairs_ZN.isPositive ? Stairs.ID_NORMAL_EXT_POS_SW : Stairs.ID_NORMAL_EXT_NEG_SW;
}
}
}
if (stairs_ZP != null) {
if (stairs_XN != null) {
if (stairs_ZP.facings.contains(ForgeDirection.WEST) && stairs_XN.facings.contains(ForgeDirection.SOUTH)) {
return stairs_XN.isPositive && stairs_ZP.isPositive ? Stairs.ID_NORMAL_INT_POS_SW : Stairs.ID_NORMAL_INT_NEG_SW;
}
if (stairs_ZP.facings.contains(ForgeDirection.EAST) && stairs_XN.facings.contains(ForgeDirection.NORTH)) {
return stairs_XN.isPositive && stairs_ZP.isPositive ? Stairs.ID_NORMAL_EXT_POS_NE : Stairs.ID_NORMAL_EXT_NEG_NE;
}
}
if (stairs_XP != null) {
if (stairs_ZP.facings.contains(ForgeDirection.EAST) && stairs_XP.facings.contains(ForgeDirection.SOUTH)) {
return stairs_XP.isPositive && stairs_ZP.isPositive ? Stairs.ID_NORMAL_INT_POS_SE : Stairs.ID_NORMAL_INT_NEG_SE;
}
if (stairs_ZP.facings.contains(ForgeDirection.WEST) && stairs_XP.facings.contains(ForgeDirection.NORTH)) {
return stairs_XP.isPositive && stairs_ZP.isPositive ? Stairs.ID_NORMAL_EXT_POS_NW : Stairs.ID_NORMAL_EXT_NEG_NW;
}
}
}
if (stairs_XN != null) {
if (stairs.facings.contains(ForgeDirection.WEST)) {
if (stairs_XN.facings.contains(ForgeDirection.SOUTH) && !stairs_XN.facings.contains(ForgeDirection.EAST)) {
return stairs_XN.isPositive ? Stairs.ID_NORMAL_INT_POS_SW : Stairs.ID_NORMAL_INT_NEG_SW;
}
if (stairs_XN.facings.contains(ForgeDirection.NORTH) && !stairs_XN.facings.contains(ForgeDirection.EAST)) {
return stairs_XN.isPositive ? Stairs.ID_NORMAL_INT_POS_NW : Stairs.ID_NORMAL_INT_NEG_NW;
}
}
if (stairs.facings.contains(ForgeDirection.EAST)) {
if (stairs_XN.facings.contains(ForgeDirection.SOUTH) && !stairs_XN.facings.contains(ForgeDirection.EAST)) {
return stairs_XN.isPositive ? Stairs.ID_NORMAL_EXT_POS_SE : Stairs.ID_NORMAL_EXT_NEG_SE;
}
if (stairs_XN.facings.contains(ForgeDirection.NORTH) && !stairs_XN.facings.contains(ForgeDirection.EAST)) {
return stairs_XN.isPositive ? Stairs.ID_NORMAL_EXT_POS_NE : Stairs.ID_NORMAL_EXT_NEG_NE;
}
}
}
if (stairs_XP != null) {
if (stairs.facings.contains(ForgeDirection.WEST)) {
if (stairs_XP.facings.contains(ForgeDirection.SOUTH) && !stairs_XP.facings.contains(ForgeDirection.WEST)) {
return stairs_XP.isPositive ? Stairs.ID_NORMAL_EXT_POS_SW : Stairs.ID_NORMAL_EXT_NEG_SW;
}
if (stairs_XP.facings.contains(ForgeDirection.NORTH) && !stairs_XP.facings.contains(ForgeDirection.WEST)) {
return stairs_XP.isPositive ? Stairs.ID_NORMAL_EXT_POS_NW : Stairs.ID_NORMAL_EXT_NEG_NW;
}
}
if (stairs.facings.contains(ForgeDirection.EAST)) {
if (stairs_XP.facings.contains(ForgeDirection.SOUTH) && !stairs_XP.facings.contains(ForgeDirection.WEST)) {
return stairs_XP.isPositive ? Stairs.ID_NORMAL_INT_POS_SE : Stairs.ID_NORMAL_INT_NEG_SE;
}
if (stairs_XP.facings.contains(ForgeDirection.NORTH) && !stairs_XP.facings.contains(ForgeDirection.WEST)) {
return stairs_XP.isPositive ? Stairs.ID_NORMAL_INT_POS_NE : Stairs.ID_NORMAL_INT_NEG_NE;
}
}
}
if (stairs_ZN != null) {
if (stairs.facings.contains(ForgeDirection.NORTH)) {
if (stairs_ZN.facings.contains(ForgeDirection.EAST) && !stairs_ZN.facings.contains(ForgeDirection.SOUTH)) {
return stairs_ZN.isPositive ? Stairs.ID_NORMAL_INT_POS_NE : Stairs.ID_NORMAL_INT_NEG_NE;
}
if (stairs_ZN.facings.contains(ForgeDirection.WEST) && !stairs_ZN.facings.contains(ForgeDirection.SOUTH)) {
return stairs_ZN.isPositive ? Stairs.ID_NORMAL_INT_POS_NW : Stairs.ID_NORMAL_INT_NEG_NW;
}
}
if (stairs.facings.contains(ForgeDirection.SOUTH)) {
if (stairs_ZN.facings.contains(ForgeDirection.EAST) && !stairs_ZN.facings.contains(ForgeDirection.SOUTH)) {
return stairs_ZN.isPositive ? Stairs.ID_NORMAL_EXT_POS_SE : Stairs.ID_NORMAL_EXT_NEG_SE;
}
if (stairs_ZN.facings.contains(ForgeDirection.WEST) && !stairs_ZN.facings.contains(ForgeDirection.SOUTH)) {
return stairs_ZN.isPositive ? Stairs.ID_NORMAL_EXT_POS_SW : Stairs.ID_NORMAL_EXT_NEG_SW;
}
}
}
if (stairs_ZP != null) {
if (stairs.facings.contains(ForgeDirection.NORTH)) {
if (stairs_ZP.facings.contains(ForgeDirection.EAST) && !stairs_ZP.facings.contains(ForgeDirection.NORTH)) {
return stairs_ZP.isPositive ? Stairs.ID_NORMAL_EXT_POS_NE : Stairs.ID_NORMAL_EXT_NEG_NE;
}
if (stairs_ZP.facings.contains(ForgeDirection.WEST) && !stairs_ZP.facings.contains(ForgeDirection.NORTH)) {
return stairs_ZP.isPositive ? Stairs.ID_NORMAL_EXT_POS_NW : Stairs.ID_NORMAL_EXT_NEG_NW;
}
}
if (stairs.facings.contains(ForgeDirection.SOUTH)) {
if (stairs_ZP.facings.contains(ForgeDirection.EAST) && !stairs_ZP.facings.contains(ForgeDirection.NORTH)) {
return stairs_ZP.isPositive ? Stairs.ID_NORMAL_INT_POS_SE : Stairs.ID_NORMAL_INT_NEG_SE;
}
if (stairs_ZP.facings.contains(ForgeDirection.WEST) && !stairs_ZP.facings.contains(ForgeDirection.NORTH)) {
return stairs_ZP.isPositive ? Stairs.ID_NORMAL_INT_POS_SW : Stairs.ID_NORMAL_INT_NEG_SW;
}
}
}
return stairsID;
}
/**
* Transforms adjacent stairs to connect to source stairs.
*/
public static void transformAdjacentStairs(World world, int stairsID, int x, int y, int z)
{
Stairs stairs_XN = world.getBlock(x - 1, y, z) instanceof BlockCarpentersStairs ? Stairs.stairsList[((TEBase) world.getTileEntity(x - 1, y, z)).getData()] : null;
Stairs stairs_XP = world.getBlock(x + 1, y, z) instanceof BlockCarpentersStairs ? Stairs.stairsList[((TEBase) world.getTileEntity(x + 1, y, z)).getData()] : null;
Stairs stairs_ZN = world.getBlock(x, y, z - 1) instanceof BlockCarpentersStairs ? Stairs.stairsList[((TEBase) world.getTileEntity(x, y, z - 1)).getData()] : null;
Stairs stairs_ZP = world.getBlock(x, y, z + 1) instanceof BlockCarpentersStairs ? Stairs.stairsList[((TEBase) world.getTileEntity(x, y, z + 1)).getData()] : null;
Stairs stairs = Stairs.stairsList[stairsID];
TEBase TE_XN = stairs_XN != null ? (TEBase) world.getTileEntity(x - 1, y, z) : null;
TEBase TE_XP = stairs_XP != null ? (TEBase) world.getTileEntity(x + 1, y, z) : null;
TEBase TE_ZN = stairs_ZN != null ? (TEBase) world.getTileEntity(x, y, z - 1) : null;
TEBase TE_ZP = stairs_ZP != null ? (TEBase) world.getTileEntity(x, y, z + 1) : null;
if (stairs.facings.contains(ForgeDirection.WEST)) {
if (stairs_ZN != null && stairs.isPositive == stairs_ZN.isPositive) {
if (stairs_ZN.facings.contains(ForgeDirection.NORTH)) {
TE_ZN.setData(stairs.isPositive ? Stairs.ID_NORMAL_EXT_POS_NW : Stairs.ID_NORMAL_EXT_NEG_NW);
}
if (stairs_ZN.facings.contains(ForgeDirection.SOUTH)) {
TE_ZN.setData(stairs.isPositive ? Stairs.ID_NORMAL_INT_POS_SW : Stairs.ID_NORMAL_INT_NEG_SW);
}
}
if (stairs_ZP != null && stairs.isPositive == stairs_ZP.isPositive) {
if (stairs_ZP.facings.contains(ForgeDirection.SOUTH)) {
TE_ZP.setData(stairs.isPositive ? Stairs.ID_NORMAL_EXT_POS_SW : Stairs.ID_NORMAL_EXT_NEG_SW);
}
if (stairs_ZP.facings.contains(ForgeDirection.NORTH)) {
TE_ZP.setData(stairs.isPositive ? Stairs.ID_NORMAL_INT_POS_NW : Stairs.ID_NORMAL_INT_NEG_NW);
}
}
}
if (stairs.facings.contains(ForgeDirection.EAST)) {
if (stairs_ZN != null && stairs.isPositive == stairs_ZN.isPositive) {
if (stairs_ZN.facings.contains(ForgeDirection.NORTH)) {
TE_ZN.setData(stairs.isPositive ? Stairs.ID_NORMAL_EXT_POS_NE : Stairs.ID_NORMAL_EXT_NEG_NE);
}
if (stairs_ZN.facings.contains(ForgeDirection.SOUTH)) {
TE_ZN.setData(stairs.isPositive ? Stairs.ID_NORMAL_INT_POS_SE : Stairs.ID_NORMAL_INT_NEG_SE);
}
}
if (stairs_ZP != null && stairs.isPositive == stairs_ZP.isPositive) {
if (stairs_ZP.facings.contains(ForgeDirection.SOUTH)) {
TE_ZP.setData(stairs.isPositive ? Stairs.ID_NORMAL_EXT_POS_SE : Stairs.ID_NORMAL_EXT_NEG_SE);
}
if (stairs_ZP.facings.contains(ForgeDirection.NORTH)) {
TE_ZP.setData(stairs.isPositive ? Stairs.ID_NORMAL_INT_POS_NE : Stairs.ID_NORMAL_INT_NEG_NE);
}
}
}
if (stairs.facings.contains(ForgeDirection.NORTH)) {
if (stairs_XN != null && stairs.isPositive == stairs_XN.isPositive) {
if (stairs_XN.facings.contains(ForgeDirection.WEST)) {
TE_XN.setData(stairs.isPositive ? Stairs.ID_NORMAL_EXT_POS_NW : Stairs.ID_NORMAL_EXT_NEG_NW);
}
if (stairs_XN.facings.contains(ForgeDirection.EAST)) {
TE_XN.setData(stairs.isPositive ? Stairs.ID_NORMAL_INT_POS_NE : Stairs.ID_NORMAL_INT_NEG_NE);
}
}
if (stairs_XP != null && stairs.isPositive == stairs_XP.isPositive) {
if (stairs_XP.facings.contains(ForgeDirection.EAST)) {
TE_XP.setData(stairs.isPositive ? Stairs.ID_NORMAL_EXT_POS_NE : Stairs.ID_NORMAL_EXT_NEG_NE);
}
if (stairs_XP.facings.contains(ForgeDirection.WEST)) {
TE_XP.setData(stairs.isPositive ? Stairs.ID_NORMAL_INT_POS_NW : Stairs.ID_NORMAL_INT_NEG_NW);
}
}
}
if (stairs.facings.contains(ForgeDirection.SOUTH)) {
if (stairs_XN != null && stairs.isPositive == stairs_XN.isPositive) {
if (stairs_XN.facings.contains(ForgeDirection.WEST)) {
TE_XN.setData(stairs.isPositive ? Stairs.ID_NORMAL_EXT_POS_SW : Stairs.ID_NORMAL_EXT_NEG_SW);
}
if (stairs_XN.facings.contains(ForgeDirection.EAST)) {
TE_XN.setData(stairs.isPositive ? Stairs.ID_NORMAL_INT_POS_SE : Stairs.ID_NORMAL_INT_NEG_SE);
}
}
if (stairs_XP != null && stairs.isPositive == stairs_XP.isPositive) {
if (stairs_XP.facings.contains(ForgeDirection.EAST)) {
TE_XP.setData(stairs.isPositive ? Stairs.ID_NORMAL_EXT_POS_SE : Stairs.ID_NORMAL_EXT_NEG_SE);
}
if (stairs_XP.facings.contains(ForgeDirection.WEST)) {
TE_XP.setData(stairs.isPositive ? Stairs.ID_NORMAL_INT_POS_SW : Stairs.ID_NORMAL_INT_NEG_SW);
}
}
}
}
}