package universalelectricity.compatibility; import ic2.api.item.IElectricItemManager; import ic2.api.item.ISpecialElectricItem; import net.minecraft.entity.EntityLivingBase; import net.minecraft.item.ItemStack; import thermalexpansion.api.item.IChargeableItem; import universalelectricity.core.item.IItemElectric; import universalelectricity.core.item.ItemElectric; public abstract class ItemUniversalElectric extends ItemElectric implements ISpecialElectricItem, IChargeableItem { public static final float CHARGE_RATE = 0.005f; public ItemUniversalElectric(int id) { super(id); } /** * IC2 */ @Override public int getChargedItemId(ItemStack itemStack) { return this.itemID; } @Override public int getEmptyItemId(ItemStack itemStack) { return this.itemID; } @Override public int getMaxCharge(ItemStack itemStack) { return (int) (this.getMaxElectricityStored(itemStack) * Compatibility.TO_IC2_RATIO); } @Override public int getTier(ItemStack itemStack) { return 1; } @Override public int getTransferLimit(ItemStack itemStack) { return (int) ((this.getMaxElectricityStored(itemStack) * CHARGE_RATE) * Compatibility.TO_IC2_RATIO); } @Override public IElectricItemManager getManager(ItemStack itemStack) { return IC2ElectricItemManager.MANAGER; } @Override public boolean canProvideEnergy(ItemStack itemStack) { return this.recharge(itemStack, 1, false) > 0; } /** * Thermal Expansion */ @Override public float receiveEnergy(ItemStack theItem, float energy, boolean doReceive) { return this.recharge(theItem, energy * Compatibility.BC3_RATIO, doReceive) * Compatibility.TO_BC_RATIO; } @Override public float transferEnergy(ItemStack theItem, float energy, boolean doTransfer) { return this.discharge(theItem, energy * Compatibility.BC3_RATIO, doTransfer) * Compatibility.TO_BC_RATIO; } @Override public float getEnergyStored(ItemStack theItem) { return this.getElectricityStored(theItem) * Compatibility.TO_BC_RATIO; } @Override public float getMaxEnergyStored(ItemStack theItem) { return this.getMaxElectricityStored(theItem) * Compatibility.TO_BC_RATIO; } public static class IC2ElectricItemManager implements IElectricItemManager { public static final IElectricItemManager MANAGER = new IC2ElectricItemManager(); private IItemElectric getElectricItem(ItemStack itemStack) { if (itemStack.getItem() instanceof IItemElectric) { return ((IItemElectric) itemStack.getItem()); } return null; } @Override public int charge(ItemStack itemStack, int amount, int tier, boolean ignoreTransferLimit, boolean simulate) { float inputElectricity = amount * Compatibility.IC2_RATIO; return (int) (getElectricItem(itemStack).recharge(itemStack, inputElectricity, !simulate) * Compatibility.TO_IC2_RATIO); } @Override public int discharge(ItemStack itemStack, int amount, int tier, boolean ignoreTransferLimit, boolean simulate) { float outputElectricity = amount * Compatibility.IC2_RATIO; return (int) (getElectricItem(itemStack).discharge(itemStack, outputElectricity, !simulate) * Compatibility.TO_IC2_RATIO); } @Override public boolean canUse(ItemStack itemStack, int amount) { return false; } @Override public int getCharge(ItemStack itemStack) { return 0; } @Override public boolean use(ItemStack itemStack, int amount, EntityLivingBase entity) { return false; } @Override public void chargeFromArmor(ItemStack itemStack, EntityLivingBase entity) { } @Override public String getToolTip(ItemStack itemStack) { return null; } } }