/**
 * Copyright (c) SpaceToad, 2011 http://www.mod-buildcraft.com
 *
 * BuildCraft is distributed under the terms of the Minecraft Mod Public License
 * 1.0, or MMPL. Please check the contents of the license located in
 * http://www.mod-buildcraft.com/MMPL-1.0.txt
 */
package buildcraft.api.power;

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

/**
 * This interface should be implemented by any Tile Entity that wishes to be
 * able to receive power.
 *
 * @author CovertJaguar <http://www.railcraft.info/>
 */
public interface IPowerReceptor {

	/**
	 * Get the PowerReceiver for this side of the block. You can return the same
	 * PowerReceiver for all sides or one for each side.
	 *
	 * You should NOT return null to this method unless you mean to NEVER
	 * receive power from that side. Returning null, after previous returning a
	 * PowerReceiver, will most likely cause pipe connections to derp out and
	 * engines to eventually explode.
	 *
	 * @param side
	 * @return
	 */
	public PowerHandler.PowerReceiver getPowerReceiver(ForgeDirection side);

	/**
	 * Call back from the PowerHandler that is called when the stored power
	 * exceeds the activation power.
	 *
	 * It can be triggered by update() calls or power modification calls.
	 *
	 * @param workProvider
	 */
	public void doWork(PowerHandler workProvider);

	public World getWorld();
}
