package net.minecraftforge.energy; /** * Reference implementation of {@link IEnergyStorage}. Use/extend this or implement your own. * * Derived from the Redstone Flux power system designed by King Lemming and originally utilized in Thermal Expansion and related mods. * Created with consent and permission of King Lemming and Team CoFH. Released with permission under LGPL 2.1 when bundled with Forge. */ public class EnergyStorage implements IEnergyStorage { protected int energy; protected int capacity; protected int maxReceive; protected int maxExtract; public EnergyStorage(int capacity) { this(capacity, capacity, capacity, 0); } public EnergyStorage(int capacity, int maxTransfer) { this(capacity, maxTransfer, maxTransfer, 0); } public EnergyStorage(int capacity, int maxReceive, int maxExtract) { this(capacity, maxReceive, maxExtract, 0); } public EnergyStorage(int capacity, int maxReceive, int maxExtract, int energy) { this.capacity = capacity; this.maxReceive = maxReceive; this.maxExtract = maxExtract; this.energy = Math.max(0 , Math.min(capacity, energy)); } @Override public int receiveEnergy(int maxReceive, boolean simulate) { if (!canReceive()) return 0; int energyReceived = Math.min(capacity - energy, Math.min(this.maxReceive, maxReceive)); if (!simulate) energy += energyReceived; return energyReceived; } @Override public int extractEnergy(int maxExtract, boolean simulate) { if (!canExtract()) return 0; int energyExtracted = Math.min(energy, Math.min(this.maxExtract, maxExtract)); if (!simulate) energy -= energyExtracted; return energyExtracted; } @Override public int getEnergyStored() { return energy; } @Override public int getMaxEnergyStored() { return capacity; } @Override public boolean canExtract() { return this.maxExtract > 0; } @Override public boolean canReceive() { return this.maxReceive > 0; } }