package ncrashed.warp.api;

import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.World;
import net.minecraftforge.common.ForgeDirection;

public interface ICoreStructure extends IBigStructure 
{
	public int getCoreX();
	public int getCoreY();
	public int getCoreZ();
	
	public int getStorageX();
	public int getStorageY();
	public int getStorageZ();
	
	public int getLampX();
	public int getLampY();
	public int getLampZ();
	
	/**
	 * Проверка наличия обязательных счетчиков.
	 * @return
	 */
	public boolean checkCounters(World world, int x, int y, int z);
	
	/**
	 * Проверка наличия экспандеров.
	 * @param world
	 * @param x
	 * @param y
	 * @param z
	 * @return
	 */
	public boolean checkExpanders(World world, int x, int y, int z);
	
	/**
	 * Возвращает соответствующий side счетчик смещения.
	 * @param side
	 * @return
	 */
	public TileEntity getSidedCounter(World world, int x, int y, int z, ForgeDirection side);
	
	/**
	 * Возвращает счетчик режимов и множителей.
	 * @return
	 */
	public TileEntity getMultCounter(World world, int x, int y, int z);
	
	/**
	 * Получение одного из двух 
	 * @param world
	 * @param x
	 * @param y
	 * @param z
	 * @param id
	 * @return
	 */
	public TileEntity getExpander(World world, int x, int y, int z, int id);
	
	/**
	 * Для ленивых, установка на экспндер (id = 0 или 1) значения val.
	 * @param world
	 * @param x
	 * @param y
	 * @param z
	 * @param id
	 * @param val
	 */
	public void setExpander(World world, int x, int y, int z, int id, int val);
	
	/**
	 * Установка конкретного бита (смещение bitPos) экспандера в значение bitVal.
	 * @param world
	 * @param x
	 * @param y
	 * @param z
	 * @param id
	 * @param bitVal
	 * @param bitPos
	 */
	public void setExpander(World world, int x, int y, int z, int id, int bitPos, boolean bitVal);
	
	/**
	 * Обнуление всех экспандеров ядра.
	 * @param world
	 * @param x
	 * @param y
	 * @param z
	 */
	public void zeroAllExpanders(World world, int x, int y, int z);
}
