@@ -0,0 +1,1518 @@
+package crazypants.enderio.machine;%0A%0Aimport crazypants.enderio.machine.capbank.BlockItemCapBank;%0Aimport net.minecraft.inventory.InventoryCrafting;%0Aimport net.minecraft.item.ItemStack;%0Aimport net.minecraft.world.World;%0Aimport net.minecraftforge.oredict.RecipeSorter;%0Aimport net.minecraftforge.oredict.ShapedOreRecipe;%0A%0Apublic class UpgradeCapBankRecipe extends ShapedOreRecipe %7B%0A%0A  static %7B%0A    RecipeSorter.register(%22EnderIO:upgradeCapBankRecipe%22, UpgradeCapBankRecipe.class, RecipeSorter.Category.SHAPED, %22after:minecraft:shaped%22);%0A  %7D%0A%0A  public UpgradeCapBankRecipe(ItemStack result, Object... recipe) %7B%0A    super(result, recipe);%0A  %7D%0A%0A  @Override%0A  public boolean matches(InventoryCrafting inv, World world) %7B%0A    for(int y=0 ; y%3C3 ; y++) %7B%0A      for(int x=0 ; x%3C3 ; x++) %7B%0A        ItemStack st = inv.getStackInRowAndColumn(x, y);%0A        if(st != null && st.getTagCompound() != null && st.getTagCompound().hasKey(%22Items%22)) %7B%0A          return false;%0A        %7D%0A      %7D%0A    %7D%0A    return super.matches(inv, world);%0A  %7D%0A%0A  @Override%0A  public ItemStack getCraftingResult(InventoryCrafting var1) %7B%0A    long energy = 0;%0A    for(int y=0 ; y%3C3 ; y++) %7B%0A      for(int x=0 ; x%3C3 ; x++) %7B%0A        ItemStack st = var1.getStackInRowAndColumn(x, y);%0A        if(st != null) %7B%0A          energy += BlockItemCapBank.getStoredEnergyForItem(st);%0A        %7D%0A      %7D%0A    %7D%0A%0A    ItemStack res = super.getCraftingResult(var1);%0A    BlockItemCapBank.setStoredEnergyForItem(res, (int)Math.min(Integer.MAX_VALUE, energy));%0A    return res;%0A  %7D%0A%7D%0A

Add UpgradeCapBankRecipe