RyanHub – file viewer
filename: common/src/main/java/rearth/oritech/api/energy/containers/DelegatingEnergyStorage.java
branch: 1.21
back to repo
package rearth.oritech.api.energy.containers;

import org.jetbrains.annotations.Nullable;
import rearth.oritech.api.energy.EnergyApi;

import java.util.function.BooleanSupplier;
import java.util.function.Supplier;

public class DelegatingEnergyStorage extends EnergyApi.EnergyStorage {
    
    protected final Supplier<EnergyApi.EnergyStorage> backingStorage;
    protected final BooleanSupplier validPredicate;
    
    public DelegatingEnergyStorage(Supplier<EnergyApi.EnergyStorage> backingStorage, @Nullable BooleanSupplier validPredicate) {
        this.backingStorage = backingStorage;
        this.validPredicate = validPredicate == null ? () -> true : validPredicate;
    }
    
    public DelegatingEnergyStorage(EnergyApi.EnergyStorage backingStorage, @Nullable BooleanSupplier validPredicate) {
        this(() -> backingStorage, validPredicate);
    }
    
    @Override
    public long getCapacity() {
        if (validPredicate.getAsBoolean()) {
            return backingStorage.get().getCapacity();
        }
        return 0;
    }
    
    @Override
    public void update() {
        if (validPredicate.getAsBoolean()) {
            backingStorage.get().update();
        }
    }
    
    @Override
    public long insert(long amount, boolean simulate) {
        if (validPredicate.getAsBoolean()) {
            return backingStorage.get().insert(amount, simulate);
        }
        return 0;
    }
    
    @Override
    public long extract(long amount, boolean simulate) {
        if (validPredicate.getAsBoolean()) {
            return backingStorage.get().extract(amount, simulate);
        }
        return 0;
    }
    
    @Override
    public boolean supportsInsertion() {
        if (validPredicate.getAsBoolean()) {
            return backingStorage.get().supportsInsertion();
        }
        return false;
    }
    
    @Override
    public boolean supportsExtraction() {
        if (validPredicate.getAsBoolean()) {
            return backingStorage.get().supportsExtraction();
        }
        return false;
    }
    
    @Override
    public void setAmount(long amount) {
        if (validPredicate.getAsBoolean()) {
            backingStorage.get().setAmount(amount);
        }
    }
    
    @Override
    public long getAmount() {
        if (validPredicate.getAsBoolean()) {
            return backingStorage.get().getAmount();
        }
        return 0;
    }
}