package crazypants.enderio.machine.power;
import java.util.List;
import net.minecraft.block.Block;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.item.Item;
import net.minecraft.item.ItemBlock;
import net.minecraft.item.ItemStack;
import cofh.api.energy.IEnergyContainerItem;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import crazypants.enderio.EnderIO;
import crazypants.enderio.EnderIOTab;
import crazypants.enderio.power.PowerHandlerUtil;
public class BlockItemCapacitorBank extends ItemBlock implements IEnergyContainerItem {
public static ItemStack createItemStackWithPower(int storedEnergy) {
ItemStack res = new ItemStack(EnderIO.blockCapacitorBank);
PowerHandlerUtil.setStoredEnergyForItem(res, storedEnergy);
return res;
}
public BlockItemCapacitorBank() {
super(EnderIO.blockCapacitorBank);
setHasSubtypes(true);
}
public BlockItemCapacitorBank(Block block) {
super(block);
setHasSubtypes(true);
setCreativeTab(EnderIOTab.tabEnderIO);
}
@Override
public int getMetadata(int par1) {
return par1;
}
@Override
public String getUnlocalizedName(ItemStack par1ItemStack) {
int meta = par1ItemStack.getItemDamage();
String result = super.getUnlocalizedName(par1ItemStack);
if(meta == 1) {
result += ".creative";
}
return result;
}
@Override
@SuppressWarnings({ "rawtypes", "unchecked" })
@SideOnly(Side.CLIENT)
public void getSubItems(Item par1, CreativeTabs par2CreativeTabs, List par3List) {
}
@Override
public boolean showDurabilityBar(ItemStack itemStack) {
return itemStack.getItemDamage() != 1;
}
@Override
public double getDurabilityForDisplay(ItemStack itemStack) {
double stored = getMaxEnergyStored(itemStack) - getEnergyStored(itemStack) + 1;
double max = getMaxEnergyStored(itemStack) + 1;
return stored / max;
}
@Override
public int receiveEnergy(ItemStack container, int maxReceive, boolean simulate) {
if(container.stackSize > 1) {
return 0;
}
int energy = getEnergyStored(container);
int maxInput = TileCapacitorBank.BASE_CAP.getMaxEnergyReceived();
int energyReceived = Math.min(getMaxEnergyStored(container) - energy, Math.min(maxReceive, maxInput));
if(!simulate && container.getItemDamage() != 1) {
energy += energyReceived;
PowerHandlerUtil.setStoredEnergyForItem(container, energy);
}
return energyReceived;
}
@Override
public int extractEnergy(ItemStack container, int maxExtract, boolean simulate) {
if(container.stackSize > 1) {
return 0;
}
int energy = getEnergyStored(container);
int maxOutput = TileCapacitorBank.BASE_CAP.getMaxEnergyExtracted();
int energyExtracted = Math.min(energy, Math.min(maxExtract, maxOutput));
if(!simulate && container.getItemDamage() != 1) {
energy -= energyExtracted;
PowerHandlerUtil.setStoredEnergyForItem(container, energy);
}
return energyExtracted;
}
@Override
public int getEnergyStored(ItemStack container) {
return PowerHandlerUtil.getStoredEnergyForItem(container);
}
@Override
public int getMaxEnergyStored(ItemStack container) {
return TileCapacitorBank.BASE_CAP.getMaxEnergyStored();
}
}