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

import net.minecraft.item.ItemStack;
import org.jetbrains.annotations.Nullable;
import rearth.oritech.api.item.ItemApi;

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

public class DelegatingInventoryStorage implements ItemApi.InventoryStorage {
    
    protected final Supplier<ItemApi.InventoryStorage> backingStorage;
    protected final BooleanSupplier validPredicate;
    
    public DelegatingInventoryStorage(Supplier<ItemApi.InventoryStorage> backingStorage, @Nullable BooleanSupplier validPredicate) {
        this.backingStorage = backingStorage;
        this.validPredicate = validPredicate == null ? () -> true : validPredicate;
    }
    
    public DelegatingInventoryStorage(ItemApi.InventoryStorage backingStorage, @Nullable BooleanSupplier validPredicate) {
        this(() -> backingStorage, validPredicate);
    }
    
    @Override
    public void update() {
        if (validPredicate.getAsBoolean())
            backingStorage.get().update();
    }
    
    @Override
    public boolean supportsInsertion() {
        if (validPredicate.getAsBoolean())
            return backingStorage.get().supportsInsertion();
        
        return false;
    }
    
    @Override
    public int insert(ItemStack inserted, boolean simulate) {
        if (validPredicate.getAsBoolean())
            return backingStorage.get().insert(inserted, simulate);
        return 0;
    }
    
    @Override
    public int insertToSlot(ItemStack inserted, int slot, boolean simulate) {
        if (validPredicate.getAsBoolean())
            return backingStorage.get().insertToSlot(inserted, slot, simulate);
        return 0;
    }
    
    @Override
    public boolean supportsExtraction() {
        if (validPredicate.getAsBoolean())
            return backingStorage.get().supportsExtraction();
        
        return false;
    }
    
    @Override
    public int extract(ItemStack extracted, boolean simulate) {
        if (validPredicate.getAsBoolean())
            return backingStorage.get().extract(extracted, simulate);
        return 0;
    }
    
    @Override
    public int extractFromSlot(ItemStack extracted, int slot, boolean simulate) {
        if (validPredicate.getAsBoolean())
            return backingStorage.get().extractFromSlot(extracted, slot, simulate);
        
        return 0;
    }
    
    @Override
    public void setStackInSlot(int slot, ItemStack stack) {
        if (validPredicate.getAsBoolean())
            backingStorage.get().setStackInSlot(slot, stack);
    }
    
    @Override
    public ItemStack getStackInSlot(int slot) {
        if (validPredicate.getAsBoolean())
            return backingStorage.get().getStackInSlot(slot);
        
        return ItemStack.EMPTY;
    }
    
    @Override
    public int getSlotCount() {
        if (validPredicate.getAsBoolean())
            return backingStorage.get().getSlotCount();
        return 0;
    }
    
    @Override
    public int getSlotLimit(int slot) {
        if (validPredicate.getAsBoolean())
            return backingStorage.get().getSlotLimit(slot);
        return 0;
    }
}