| package cofh.api.energy; |
| |
| import net.minecraft.item.Item; |
| import net.minecraft.item.ItemStack; |
| import net.minecraft.nbt.NBTTagCompound; |
| |
| /** |
| * Reference implementation of {@link IEnergyContainerItem}. Use/extend this or implement your own. |
| * |
| * @author King Lemming |
| * |
| */ |
| public class ItemEnergyContainer extends Item implements IEnergyContainerItem { |
| |
| protected int capacity; |
| protected int maxReceive; |
| protected int maxExtract; |
| |
| public ItemEnergyContainer(int itemID) { |
| |
| super(itemID); |
| } |
| |
| public ItemEnergyContainer(int itemID, int capacity) { |
| |
| this(itemID, capacity, capacity, capacity); |
| } |
| |
| public ItemEnergyContainer(int itemID, int capacity, int maxTransfer) { |
| |
| this(itemID, capacity, maxTransfer, maxTransfer); |
| } |
| |
| public ItemEnergyContainer(int itemID, int capacity, int maxReceive, int maxExtract) { |
| |
| super(itemID); |
| this.capacity = capacity; |
| this.maxReceive = maxReceive; |
| this.maxExtract = maxExtract; |
| } |
| |
| public ItemEnergyContainer setCapacity(int capacity) { |
| |
| this.capacity = capacity; |
| return this; |
| } |
| |
| public void setMaxTransfer(int maxTransfer) { |
| |
| setMaxReceive(maxTransfer); |
| setMaxExtract(maxTransfer); |
| } |
| |
| public void setMaxReceive(int maxReceive) { |
| |
| this.maxReceive = maxReceive; |
| } |
| |
| public void setMaxExtract(int maxExtract) { |
| |
| this.maxExtract = maxExtract; |
| } |
| |
| /* IEnergyContainerItem */ |
| @Override |
| public int receiveEnergy(ItemStack container, int maxReceive, boolean simulate) { |
| |
| if (container.stackTagCompound == null) { |
| container.stackTagCompound = new NBTTagCompound(); |
| } |
| int energy = container.stackTagCompound.getInteger("Energy"); |
| int energyReceived = Math.min(capacity - energy, Math.min(this.maxReceive, maxReceive)); |
| |
| if (!simulate) { |
| energy += energyReceived; |
| container.stackTagCompound.setInteger("Energy", energy); |
| } |
| return energyReceived; |
| } |
| |
| @Override |
| public int extractEnergy(ItemStack container, int maxExtract, boolean simulate) { |
| |
| if (container.stackTagCompound == null || !container.stackTagCompound.hasKey("Energy")) { |
| return 0; |
| } |
| int energy = container.stackTagCompound.getInteger("Energy"); |
| int energyExtracted = Math.min(energy, Math.min(this.maxExtract, maxExtract)); |
| |
| if (!simulate) { |
| energy -= energyExtracted; |
| container.stackTagCompound.setInteger("Energy", energy); |
| } |
| return energyExtracted; |
| } |
| |
| @Override |
| public int getEnergyStored(ItemStack container) { |
| |
| if (container.stackTagCompound == null || !container.stackTagCompound.hasKey("Energy")) { |
| return 0; |
| } |
| return container.stackTagCompound.getInteger("Energy"); |
| } |
| |
| @Override |
| public int getMaxEnergyStored(ItemStack container) { |
| |
| return capacity; |
| } |
| |
| } |