package mods.railcraft.common.plugins.rf;
import cofh.api.energy.IEnergyProvider;
import cofh.api.energy.IEnergyReceiver;
import mods.railcraft.common.util.misc.AdjacentTileCache;
import net.minecraft.tileentity.TileEntity;
import net.minecraftforge.common.util.ForgeDirection;
/**
* Created by CovertJaguar on 5/12/2016 for Railcraft.
*
* @author CovertJaguar <http://www.railcraft.info>
*/
public class RedstoneFluxPlugin {
public static int pushToTile(TileEntity tile, ForgeDirection side, int powerToTransfer) {
if (canTileReceivePower(tile, side)) {
IEnergyReceiver handler = (IEnergyReceiver) tile;
if (powerToTransfer > 0)
return handler.receiveEnergy(side, powerToTransfer, false);
}
return 0;
}
public static int pushToTiles(IEnergyProvider provider, AdjacentTileCache tileCache, int pushPerSide) {
int pushed = 0;
for (ForgeDirection side : ForgeDirection.VALID_DIRECTIONS) {
TileEntity tile = tileCache.getTileOnSide(side);
if (canTileReceivePower(tile, side.getOpposite())) {
IEnergyReceiver handler = (IEnergyReceiver) tile;
int amountToPush = provider.extractEnergy(side, pushPerSide, true);
if (amountToPush > 0) {
int amountPushed = handler.receiveEnergy(side.getOpposite(), amountToPush, false);
pushed += amountPushed;
provider.extractEnergy(side, amountPushed, false);
}
}
}
return pushed;
}
public static boolean canTileReceivePower(TileEntity tile, ForgeDirection side) {
if (tile instanceof IEnergyReceiver) {
IEnergyReceiver handler = (IEnergyReceiver) tile;
return handler.canConnectEnergy(side);
}
return false;
}
}