119 lines
2.1 KiB
Java
119 lines
2.1 KiB
Java
package ic2.api;
|
|
|
|
import net.minecraft.tileentity.TileEntity;
|
|
import net.minecraftforge.common.ForgeDirection;
|
|
|
|
/**
|
|
* 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();
|
|
}
|