package micdoodle8.mods.galacticraft.core.energy.item; import ic2.api.item.IElectricItemManager; import micdoodle8.mods.galacticraft.core.energy.EnergyConfigHandler; import net.minecraft.entity.EntityLivingBase; import net.minecraft.item.ItemStack; /* * Interface between Galacticraft electric items (batteries) and IC2. * * Galactricraft items implemented as Tier 1 items when recharging * and for discharging purposes (so can power anything) */ public class ElectricItemManagerIC2 implements IElectricItemManager { @Override public double charge(ItemStack itemStack, double amount, int tier, boolean ignoreTransferLimit, boolean simulate) { if (itemStack.getItem() instanceof ItemElectricBase) { ItemElectricBase item = (ItemElectricBase) itemStack.getItem(); if (amount > item.getMaxCharge(itemStack)) { amount = item.getMaxCharge(itemStack); } float energy = (float) amount * EnergyConfigHandler.IC2_RATIO; float rejectedElectricity = Math.max(item.getElectricityStored(itemStack) + energy - item.getMaxElectricityStored(itemStack), 0); float energyToReceive = energy - rejectedElectricity; if (!ignoreTransferLimit && energyToReceive > item.transferMax) { energyToReceive = item.transferMax; } if (!simulate) { item.setElectricity(itemStack, item.getElectricityStored(itemStack) + energyToReceive); } return energyToReceive / EnergyConfigHandler.IC2_RATIO; } return 0D; } @Override public double discharge(ItemStack itemStack, double amount, int tier, boolean ignoreTransferLimit, boolean externally, boolean simulate) { if (itemStack.getItem() instanceof ItemElectricBase) { ItemElectricBase item = (ItemElectricBase) itemStack.getItem(); float energy = (float) amount / EnergyConfigHandler.TO_IC2_RATIO; float energyToTransfer = Math.min(item.getElectricityStored(itemStack), energy); if (!ignoreTransferLimit) { energyToTransfer = Math.min(energyToTransfer, item.transferMax); } if (!simulate) { item.setElectricity(itemStack, item.getElectricityStored(itemStack) - energyToTransfer); } return energyToTransfer * EnergyConfigHandler.TO_IC2_RATIO; } return 0D; } @Override public double getCharge(ItemStack itemStack) { if (itemStack.getItem() instanceof ItemElectricBase) { ItemElectricBase item = (ItemElectricBase) itemStack.getItem(); return item.getElectricityStored(itemStack) * EnergyConfigHandler.TO_IC2_RATIO; } return 0D; } @Override public boolean canUse(ItemStack itemStack, double amount) { if (itemStack.getItem() instanceof ItemElectricBase) { return this.getCharge(itemStack) >= amount; } return false; } @Override public boolean use(ItemStack itemStack, double amount, EntityLivingBase entity) { if (itemStack.getItem() instanceof ItemElectricBase) { return this.discharge(itemStack, amount, 1, true, false, false) >= amount - 1; } return false; } @Override public void chargeFromArmor(ItemStack itemStack, EntityLivingBase entity) { } @Override public String getToolTip(ItemStack itemStack) { return null; } @Override public double getMaxCharge(ItemStack stack) { if (stack.getItem() instanceof ItemElectricBase) { return ((ItemElectricBase) stack.getItem()).getMaxCharge(stack); } return 1; } @Override public int getTier(ItemStack stack) { if (stack.getItem() instanceof ItemElectricBase) { return ((ItemElectricBase) stack.getItem()).getTier(stack); } return 1; } }