filename:
common/src/main/java/rearth/oritech/api/energy/containers/SimpleEnergyStorage.java
branch:
1.21
back to repo
package rearth.oritech.api.energy.containers;
import rearth.oritech.api.energy.EnergyApi;
public class SimpleEnergyStorage extends EnergyApi.EnergyStorage {
private final long maxInsert;
private final long maxExtract;
private final long capacity;
private final Runnable onUpdate;
private long amount;
public SimpleEnergyStorage(long maxInsert, long maxExtract, long capacity, Runnable onUpdate) {
this.maxInsert = maxInsert;
this.maxExtract = maxExtract;
this.capacity = capacity;
this.onUpdate = onUpdate;
}
public SimpleEnergyStorage(long maxInsert, long maxExtract, long capacity) {
this.maxInsert = maxInsert;
this.maxExtract = maxExtract;
this.capacity = capacity;
this.onUpdate = () -> {};
}
@Override
public long insert(long amount, boolean simulate) {
long inserted = Math.min(Math.min(maxInsert, amount), capacity - this.amount);
if (!simulate) {
this.amount += inserted;
}
return inserted;
}
public long insertIgnoringLimit(long amount, boolean simulate) {
long inserted = Math.min(amount, capacity - this.amount);
if (!simulate) {
this.amount += inserted;
}
return inserted;
}
@Override
public long extract(long amount, boolean simulate) {
long extracted = Math.min(Math.min(amount, maxExtract), this.amount);
if (!simulate) {
this.amount -= extracted;
}
return extracted;
}
public long extractIgnoringLimit(long amount, boolean simulate) {
long extracted = Math.min(amount, this.amount);
if (!simulate) {
this.amount -= extracted;
}
return extracted;
}
@Override
public void setAmount(long amount) {
this.amount = amount;
}
@Override
public long getAmount() {
return amount;
}
@Override
public long getCapacity() {
return capacity;
}
@Override
public void update() {
onUpdate.run();
}
}