package advancedsystemsmanager.api.tileentities;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.block.Block;
import net.minecraft.client.renderer.texture.IIconRegister;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.IIcon;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
import java.util.Collection;
import java.util.List;
public interface ITileFactory
{
void setBlock(Block block);
Block getBlock();
void setMetadata(int metadata);
int getMetadata();
float getBlockHardness();
String getUnlocalizedName(int subtype);
ItemStack getItemStack(int subtype);
boolean hasTileEntity();
boolean canBeAddedToCluster(Collection<ITileFactory> existingFactories);
TileEntity createTileEntity(World world, int metadata);
<T extends TileEntity>T getTileEntity(IBlockAccess world, int x, int y, int z);
boolean isInstance(TileEntity tileEntity);
String getKey();
boolean canPlaceBlock(World world, int x, int y, int z, ItemStack stack);
boolean isCable(ITileElement element);
@SideOnly(Side.CLIENT)
void registerIcons(IIconRegister register);
@SideOnly(Side.CLIENT)
void getSubBlocks(Item item, CreativeTabs tab, List<ItemStack> list);
@SideOnly(Side.CLIENT)
IIcon getIcon(int side, int subtype);
@SideOnly(Side.CLIENT)
IIcon[] getIcons(int subtype);
@SideOnly(Side.CLIENT)
void addInformation(ItemStack stack, EntityPlayer player, List<String> information, boolean advanced);
void saveToClusterTag(ItemStack stack, NBTTagCompound tag);
}