package crazypants.enderio.machine.capbank; import net.minecraft.block.Block; import net.minecraft.item.ItemBlock; import net.minecraft.item.ItemStack; import cofh.api.energy.IEnergyContainerItem; import crazypants.enderio.EnderIO; import crazypants.enderio.EnderIOTab; import crazypants.enderio.power.PowerHandlerUtil; public class BlockItemCapBank extends ItemBlock implements IEnergyContainerItem { public static ItemStack createItemStackWithPower(int meta, int storedEnergy) { ItemStack res = new ItemStack(EnderIO.blockCapBank, 1, meta); PowerHandlerUtil.setStoredEnergyForItem(res, storedEnergy); CapBankType type = CapBankType.getTypeFromMeta(meta); type.writeTypeToNBT(res.stackTagCompound); return res; } public BlockItemCapBank() { super(EnderIO.blockCapBank); setHasSubtypes(true); } public BlockItemCapBank(Block block) { super(block); setHasSubtypes(true); setCreativeTab(EnderIOTab.tabEnderIO); } @Override public int getMetadata(int par1) { return par1; } @Override public String getUnlocalizedName(ItemStack par1ItemStack) { return CapBankType.getTypeFromMeta(par1ItemStack.getItemDamage()).getUnlocalizedName(); } @Override public boolean showDurabilityBar(ItemStack itemStack) { return !CapBankType.getTypeFromMeta(itemStack.getItemDamage()).isCreative(); } @Override public double getDurabilityForDisplay(ItemStack itemStack) { int maxStored = CapBankType.getTypeFromMeta(itemStack.getItemDamage()).getMaxEnergyStored(); double stored = maxStored - getEnergyStored(itemStack) + 1; double max = maxStored + 1; return stored / max; } @Override public int receiveEnergy(ItemStack container, int maxReceive, boolean simulate) { if(container.stackSize > 1) { return 0; } CapBankType type = CapBankType.getTypeFromMeta(container.getItemDamage()); int energy = getEnergyStored(container); int maxInput = type.getMaxIO(); int energyReceived = Math.min(type.getMaxEnergyStored() - energy, Math.min(maxReceive, maxInput)); if(!simulate && !type.isCreative()) { energy += energyReceived; PowerHandlerUtil.setStoredEnergyForItem(container, energy); } return energyReceived; } @Override public int extractEnergy(ItemStack container, int maxExtract, boolean simulate) { if(container.stackSize > 1) { return 0; } CapBankType type = CapBankType.getTypeFromMeta(container.getItemDamage()); int energy = getEnergyStored(container); int maxOutput = type.getMaxIO(); int energyExtracted = Math.min(energy, Math.min(maxExtract, maxOutput)); if(!simulate && !type.isCreative()) { 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 CapBankType.getTypeFromMeta(container.getItemDamage()).getMaxEnergyStored(); } }