54802be11f
Added temporary(!) API dependencies, will resolved via Maven later on Added mcmod.info Added pack.mcmeta template Added hacked BC jar to use facades indev Split build logic into several pieces Update gitignore Modify build.gradle to match changes
159 lines
3 KiB
Java
159 lines
3 KiB
Java
package cofh.api.energy;
|
|
|
|
import net.minecraft.nbt.NBTTagCompound;
|
|
|
|
/**
|
|
* Reference implementation of {@link IEnergyStorage}. Use/extend this or implement your own.
|
|
*
|
|
* @author King Lemming
|
|
*
|
|
*/
|
|
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);
|
|
}
|
|
|
|
public EnergyStorage(int capacity, int maxTransfer) {
|
|
|
|
this(capacity, maxTransfer, maxTransfer);
|
|
}
|
|
|
|
public EnergyStorage(int capacity, int maxReceive, int maxExtract) {
|
|
|
|
this.capacity = capacity;
|
|
this.maxReceive = maxReceive;
|
|
this.maxExtract = maxExtract;
|
|
}
|
|
|
|
public EnergyStorage readFromNBT(NBTTagCompound nbt) {
|
|
|
|
this.energy = nbt.getInteger("Energy");
|
|
|
|
if (energy > capacity) {
|
|
energy = capacity;
|
|
}
|
|
return this;
|
|
}
|
|
|
|
public NBTTagCompound writeToNBT(NBTTagCompound nbt) {
|
|
|
|
if (energy < 0) {
|
|
energy = 0;
|
|
}
|
|
nbt.setInteger("Energy", energy);
|
|
return nbt;
|
|
}
|
|
|
|
public void setCapacity(int capacity) {
|
|
|
|
this.capacity = capacity;
|
|
|
|
if (energy > capacity) {
|
|
energy = capacity;
|
|
}
|
|
}
|
|
|
|
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;
|
|
}
|
|
|
|
public int getMaxReceive() {
|
|
|
|
return maxReceive;
|
|
}
|
|
|
|
public int getMaxExtract() {
|
|
|
|
return maxExtract;
|
|
}
|
|
|
|
/**
|
|
* This function is included to allow for server -> client sync. Do not call this externally to the containing Tile Entity, as not all IEnergyHandlers are
|
|
* guaranteed to have it.
|
|
*
|
|
* @param energy
|
|
*/
|
|
public void setEnergyStored(int energy) {
|
|
|
|
this.energy = energy;
|
|
|
|
if (this.energy > capacity) {
|
|
this.energy = capacity;
|
|
} else if (this.energy < 0) {
|
|
this.energy = 0;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* This function is included to allow the containing tile to directly and efficiently modify the energy contained in the EnergyStorage. Do not rely on this
|
|
* externally, as not all IEnergyHandlers are guaranteed to have it.
|
|
*
|
|
* @param energy
|
|
*/
|
|
public void modifyEnergyStored(int energy) {
|
|
|
|
this.energy += energy;
|
|
|
|
if (this.energy > capacity) {
|
|
this.energy = capacity;
|
|
} else if (this.energy < 0) {
|
|
this.energy = 0;
|
|
}
|
|
}
|
|
|
|
/* IEnergyStorage */
|
|
@Override
|
|
public int receiveEnergy(int maxReceive, boolean simulate) {
|
|
|
|
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) {
|
|
|
|
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;
|
|
}
|
|
|
|
}
|