/**
 * Copyright (c) 2011-2017, SpaceToad and the BuildCraft Team
 * http://www.mod-buildcraft.com
 *
 * The BuildCraft API is distributed under the terms of the MIT License.
 * Please check the contents of the license, which should be located
 * as "LICENSE.API" in the BuildCraft source code distribution.
 */
package buildcraft.api.robots;

import net.minecraft.entity.Entity;
import net.minecraft.entity.EntityLiving;
import net.minecraft.inventory.IInventory;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.World;
import net.minecraftforge.fluids.IFluidHandler;

import cofh.api.energy.IEnergyStorage;
import buildcraft.api.boards.RedstoneBoardRobot;
import buildcraft.api.core.IZone;

public abstract class EntityRobotBase extends EntityLiving implements IInventory, IFluidHandler {

	public static final int MAX_ENERGY = 100000;
	public static final int SAFETY_ENERGY = MAX_ENERGY / 5;
	public static final int SHUTDOWN_ENERGY = 0;
	public static final long NULL_ROBOT_ID = Long.MAX_VALUE;

	public EntityRobotBase(World par1World) {
		super(par1World);
	}

	public abstract void setItemInUse(ItemStack stack);

	public abstract void setItemActive(boolean b);

	public abstract boolean isMoving();

	public abstract DockingStation getLinkedStation();

	public abstract RedstoneBoardRobot getBoard();

	public abstract void aimItemAt(float yaw, float pitch);

	public abstract void aimItemAt(int x, int y, int z);

	public abstract float getAimYaw();

	public abstract float getAimPitch();

	public abstract int getEnergy();

	public abstract IEnergyStorage getBattery();

	public abstract DockingStation getDockingStation();

	public abstract void dock(DockingStation station);

	public abstract void undock();

	public abstract IZone getZoneToWork();

	public abstract IZone getZoneToLoadUnload();

	public abstract boolean containsItems();

	public abstract boolean hasFreeSlot();

	public abstract void unreachableEntityDetected(Entity entity);

	public abstract boolean isKnownUnreachable(Entity entity);

	public abstract long getRobotId();

	public abstract IRobotRegistry getRegistry();

	public abstract void releaseResources();

	public abstract void onChunkUnload();

	public abstract ItemStack receiveItem(TileEntity tile, ItemStack stack);

	public abstract void setMainStation(DockingStation station);
}
