package buildcraft.api.items; import java.util.List; import net.minecraft.item.ItemStack; import net.minecraft.util.EnumFacing; import net.minecraft.util.math.BlockPos; import buildcraft.api.core.IBox; import buildcraft.api.core.IZone; /** Created by asie on 2/28/15. */ public interface IMapLocation extends INamedItem { public enum MapLocationType { CLEAN, SPOT, AREA, PATH, ZONE, /** Like PATH but repeats around in a loop. */ PATH_REPEATING; public final int meta = ordinal(); public static MapLocationType getFromStack(ItemStack stack) { int dam = stack.getItemDamage(); if (dam < 0 || dam >= values().length) { return MapLocationType.CLEAN; } return values()[dam]; } public void setToStack(ItemStack stack) { stack.setItemDamage(meta); } } /** This function can be used for SPOT types. * * @param stack * @return The point representing the map location. */ BlockPos getPoint(ItemStack stack); /** This function can be used for SPOT and AREA types. * * @param stack * @return The box representing the map location. */ IBox getBox(ItemStack stack); /** This function can be used for SPOT, AREA and ZONE types. The PATH type needs to be handled separately. * * @param stack * @return An IZone representing the map location - also an instance of IBox for SPOT and AREA types. */ IZone getZone(ItemStack stack); /** This function can be used for SPOT and PATH types. * * @param stack * @return A list of BlockPoses representing the path the Map Location stores. */ List<BlockPos> getPath(ItemStack stack); /** This function can be used for SPOT types only. * * @param stack * @return The side of the spot. */ EnumFacing getPointSide(ItemStack stack); }