buildcraft/common/buildcraft/core/RFBattery.java

97 lines
2.2 KiB
Java

package buildcraft.core;
import net.minecraft.nbt.NBTTagCompound;
import cofh.api.energy.IEnergyStorage;
public class RFBattery implements IEnergyStorage {
private int energy, maxEnergy, maxReceive, maxExtract;
public RFBattery(int maxEnergy, int maxReceive, int maxExtract) {
this.maxEnergy = maxEnergy;
this.maxReceive = maxReceive;
this.maxExtract = maxExtract;
}
public void readFromNBT(NBTTagCompound tag) {
if (tag.hasKey("energy") && tag.hasKey("maxEnergy") && tag.hasKey("maxReceive") && tag.hasKey("maxExtract")) {
this.energy = tag.getInteger("energy");
this.maxEnergy = tag.getInteger("maxEnergy");
this.maxReceive = tag.getInteger("maxReceive");
this.maxExtract = tag.getInteger("maxExtract");
}
}
public void writeToNBT(NBTTagCompound tag) {
tag.setInteger("energy", this.energy);
tag.setInteger("maxEnergy", this.maxEnergy);
tag.setInteger("maxReceive", this.maxReceive);
tag.setInteger("maxExtract", this.maxExtract);
}
public int addEnergy(int minReceive, int maxReceive, boolean simulate) {
int amountReceived = Math.min(maxReceive, maxEnergy - energy);
if (amountReceived < minReceive) {
return 0;
}
if (!simulate) {
energy += amountReceived;
}
return amountReceived;
}
public int useEnergy(int minExtract, int maxExtract, boolean simulate) {
int amountExtracted = Math.min(maxExtract, energy);
if (amountExtracted < minExtract) {
return 0;
}
if (!simulate) {
energy -= amountExtracted;
}
return amountExtracted;
}
@Override
public int receiveEnergy(int maxReceive, boolean simulate) {
return addEnergy(0, Math.min(maxReceive, this.maxReceive), simulate);
}
@Override
public int extractEnergy(int maxExtract, boolean simulate) {
return useEnergy(0, Math.min(maxExtract, this.maxExtract), simulate);
}
@Override
public int getEnergyStored() {
return energy;
}
@Override
public int getMaxEnergyStored() {
return maxEnergy;
}
public int getMaxEnergyReceive() {
return maxReceive;
}
public int getMaxEnergyExtract() {
return maxExtract;
}
public void setEnergy(int iEnergy) {
energy = iEnergy;
if (energy < 0) {
energy = 0;
} else if (energy > maxEnergy) {
energy = maxEnergy;
}
}
}