package miscperipherals.util; import miscperipherals.tile.Tile; import net.minecraft.inventory.IInventory; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.Vec3; import net.minecraft.world.World; import dan200.turtle.api.ITurtleAccess; public interface Positionable { public Vec3 getPosition(); public int getFacing(); public World getWorld(); public IInventory getInventory(); public static class PositionableTile implements Positionable { private final TileEntity tile; public PositionableTile(TileEntity tile) { this.tile = tile; } @Override public Vec3 getPosition() { return tile == null ? null : Vec3.createVectorHelper(tile.xCoord, tile.yCoord, tile.zCoord); } @Override public int getFacing() { return tile instanceof Tile ? ((Tile) tile).getFacing() : 0; } @Override public World getWorld() { return tile == null ? null : tile.worldObj; } @Override public IInventory getInventory() { return tile instanceof IInventory ? (IInventory)tile : null; } } public static class PositionableTurtle implements Positionable { private final ITurtleAccess turtle; public PositionableTurtle(ITurtleAccess turtle) { this.turtle = turtle; } @Override public Vec3 getPosition() { return turtle == null ? null : turtle.getVisualPosition(1.0F); } @Override public int getFacing() { return turtle.getFacingDir(); } @Override public World getWorld() { return turtle == null ? null : turtle.getWorld(); } @Override public IInventory getInventory() { return turtle instanceof IInventory ? (IInventory)turtle : null; } } }