package crazypants.enderio.power; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraftforge.common.util.ForgeDirection; import cofh.api.energy.IEnergyConnection; import cofh.api.energy.IEnergyHandler; import cofh.api.energy.IEnergyProvider; import cofh.api.energy.IEnergyReceiver; import crazypants.enderio.machine.capbank.TileCapBank; public class PowerHandlerUtil { public static final String STORED_ENERGY_NBT_KEY = "storedEnergyRF"; public static IPowerInterface create(Object o) { if (o instanceof TileCapBank) { return new CapBankPI((TileCapBank) o); } else if (o instanceof IEnergyHandler) { return new EnergyHandlerPI((IEnergyHandler) o); } else if (o instanceof IEnergyProvider) { return new EnergyProviderPI((IEnergyProvider) o); } else if(o instanceof IEnergyReceiver) { return new EnergyReceiverPI((IEnergyReceiver) o); } else if(o instanceof IEnergyConnection) { return new EnergyConnectionPI((IEnergyConnection) o); } return null; } public static int getStoredEnergyForItem(ItemStack item) { NBTTagCompound tag = item.getTagCompound(); if(tag == null) { return 0; } if(tag.hasKey("storedEnergy")) { double storedMj = tag.getDouble("storedEnergy"); return (int) (storedMj * 10); } return tag.getInteger(STORED_ENERGY_NBT_KEY); } public static void setStoredEnergyForItem(ItemStack item, int storedEnergy) { NBTTagCompound tag = item.getTagCompound(); if(tag == null) { tag = new NBTTagCompound(); } tag.setInteger(STORED_ENERGY_NBT_KEY, storedEnergy); item.setTagCompound(tag); } public static int recieveInternal(IInternalPoweredTile target, int maxReceive, ForgeDirection from, boolean simulate) { int result = Math.min(target.getMaxEnergyRecieved(from), maxReceive); result = Math.min(target.getMaxEnergyStored() - target.getEnergyStored(), result); result = Math.max(0, result); if(result > 0 && !simulate) { target.setEnergyStored(target.getEnergyStored() + result); } return result; } }