/**
 * 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 java.util.Collection;

import net.minecraft.nbt.NBTTagCompound;
import net.minecraftforge.common.util.ForgeDirection;

public interface IRobotRegistry {

	long getNextRobotId();

	void registerRobot(EntityRobotBase robot);

	void killRobot(EntityRobotBase robot);

	void unloadRobot(EntityRobotBase robot);

	EntityRobotBase getLoadedRobot(long id);

	boolean isTaken(ResourceId resourceId);

	long robotIdTaking(ResourceId resourceId);

	EntityRobotBase robotTaking(ResourceId resourceId);

	boolean take(ResourceId resourceId, EntityRobotBase robot);

	boolean take(ResourceId resourceId, long robotId);

	void release(ResourceId resourceId);

	void releaseResources(EntityRobotBase robot);

	DockingStation getStation(int x, int y, int z, ForgeDirection side);

	Collection<DockingStation> getStations();

	void registerStation(DockingStation station);

	void removeStation(DockingStation station);

	void take(DockingStation station, long robotId);

	void release(DockingStation station, long robotId);

	void writeToNBT(NBTTagCompound nbt);

	void readFromNBT(NBTTagCompound nbt);

	void registryMarkDirty();
}
