package mekanism.common.capabilities; import java.util.ArrayList; import java.util.List; import net.minecraft.item.ItemStack; import net.minecraft.util.EnumFacing; import net.minecraftforge.common.capabilities.Capability; import net.minecraftforge.common.capabilities.ICapabilityProvider; public class ItemCapabilityWrapper implements ICapabilityProvider { private List<ItemCapability> capabilities = new ArrayList<ItemCapability>(); protected final ItemStack itemStack; public ItemCapabilityWrapper(ItemStack stack, ItemCapability... caps) { itemStack = stack; for(ItemCapability c : caps) { c.wrapper = this; capabilities.add(c); } } @Override public boolean hasCapability(Capability<?> capability, EnumFacing facing) { for(ItemCapability cap : capabilities) { if(cap.canProcess(capability)) { return true; } } return false; } @Override public <T> T getCapability(Capability<T> capability, EnumFacing facing) { for(ItemCapability cap : capabilities) { if(cap.canProcess(capability)) { return (T)cap; } } return null; } public static abstract class ItemCapability { private ItemCapabilityWrapper wrapper; public abstract boolean canProcess(Capability capability); public ItemStack getStack() { return wrapper.itemStack; } } }