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

import net.minecraft.item.ItemStack;
import net.minecraft.util.math.Direction;

public class EnergyApi {
    
    public static BlockEnergyApi BLOCK;
    public static ItemEnergyApi ITEM;
    
    public static Long transfer(EnergyStorage from, EnergyStorage to, long amount, boolean simulate) {
        var extracted = from.extract(amount, true);
        var inserted = to.insert(extracted, simulate);
        extracted = from.extract(inserted, simulate);
        
        if (extracted > 0 && !simulate) {
            from.update();
            to.update();
        }
        
        return extracted;
    }
    
    public interface BlockProvider {
        
        EnergyStorage getEnergyStorage(Direction direction);
        
    }
    
    public interface ItemProvider {
        
        EnergyStorage getEnergyStorage(ItemStack stack);
        
    }
    
    public abstract static class EnergyStorage {
        
        public boolean supportsInsertion() {
            return true;
        }
        
        public abstract long insert(long maxAmount, boolean simulate);
        
        public boolean supportsExtraction() {
            return true;
        }
        
        public abstract long extract(long maxAmount, boolean simulate);
        
        public abstract void setAmount(long amount);
        
        public abstract long getAmount();
        
        public abstract long getCapacity();
        
        public abstract void update();
    }
    
}