/**
* Copyright (c) Lambda Innovation, 2013-2016
* This file is part of the AcademyCraft mod.
* https://github.com/LambdaInnovation/AcademyCraft
* Licensed under GPLv3, see project root for more information.
*/
package cn.academy.support;
import cn.academy.energy.api.IFItemManager;
import cn.lambdalib.annoreg.core.Registrant;
import cn.lambdalib.annoreg.mc.RegInitCallback;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import java.util.ArrayList;
import java.util.List;
/**
* A generic-typed item energy helper.
*
* @author WeAthFolD
*/
@Registrant
public class EnergyItemHelper {
private static List<EnergyItemManager> supported = new ArrayList<>();
@RegInitCallback
private static void init() {
register(IFItemManager.instance);
}
public static void register(EnergyItemManager man) {
supported.add(man);
}
public static boolean isSupported(ItemStack stack) {
for (EnergyItemManager m : supported) {
if (m.isSupported(stack))
return true;
}
return false;
}
public static double getEnergy(ItemStack stack) {
for (EnergyItemManager m : supported) {
if (m.isSupported(stack))
return m.getEnergy(stack);
}
return 0.0;
}
public static void setEnergy(ItemStack stack, double energy) {
for (EnergyItemManager m : supported) {
if (m.isSupported(stack)) {
m.setEnergy(stack, energy);
return;
}
}
}
public static double charge(ItemStack stack, double amt, boolean ignoreBandwidth) {
for (EnergyItemManager m : supported) {
if (m.isSupported(stack)) {
return m.charge(stack, amt, ignoreBandwidth);
}
}
return amt;
}
public static double pull(ItemStack stack, double amt, boolean ignoreBandwidth) {
for (EnergyItemManager m : supported) {
if (m.isSupported(stack)) {
return m.pull(stack, amt, ignoreBandwidth);
}
}
return 0;
}
public static ItemStack createEmptyItem(Item item) {
ItemStack ret = new ItemStack(item);
charge(ret, 0, true);
return ret;
}
public static ItemStack createFullItem(Item item) {
ItemStack ret = new ItemStack(item);
charge(ret, Integer.MAX_VALUE, true);
return ret;
}
public interface EnergyItemManager {
boolean isSupported(ItemStack stack);
double getEnergy(ItemStack stack);
void setEnergy(ItemStack stack, double energy);
/**
* @return How much energy not transfered into stack(left)
*/
double charge(ItemStack stack, double amt, boolean ignoreBandwidth);
/**
* @return How much energy pulled out of stack
*/
double pull(ItemStack stack, double amt, boolean ignoreBandwidth);
}
}