package buildcraftAdditions.compat.buildcraft.recipe.tool;
import buildcraft.api.recipes.IIntegrationRecipe;
import buildcraftAdditions.items.Tools.ItemKineticMultiTool;
import buildcraftAdditions.reference.ItemLoader;
import com.google.common.collect.Lists;
import net.minecraft.block.Block;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import java.util.ArrayList;
import java.util.List;
/**
* Copyright (c) 2014-2015, AEnterprise
* http://buildcraftadditions.wordpress.com/
* Buildcraft Additions is distributed under the terms of GNU GPL v3.0
* Please check the contents of the license located in
* http://buildcraftadditions.wordpress.com/wiki/licensing-stuff/
*/
public class KineticToolUpgradeRecipe implements IIntegrationRecipe {
private final List<IKineticToolUpgrade> upgrades;
public KineticToolUpgradeRecipe() {
upgrades = new ArrayList<IKineticToolUpgrade>();
}
public void register(String stickName, String inputStickOreDictName) {
register(stickName, inputStickOreDictName, "NONE");
}
public void register(String stickName, String inputStickOreDictName, String prevStickName) {
upgrades.add(new KineticToolStickUpgrade(stickName, inputStickOreDictName, prevStickName));
}
public void register(String upgradeName, Item upgradeItem) {
register(upgradeName, new ItemStack(upgradeItem));
}
public void register(String upgradeName, Block upgradeBlock) {
register(upgradeName, new ItemStack(upgradeBlock));
}
public void register(String upgradeName, ItemStack upgradeStack) {
upgrades.add(new KineticToolUpgrade(upgradeName, upgradeStack));
}
@Override
public int getEnergyCost() {
return 20000;
}
@Override
public List<ItemStack> getExampleInput() {
List<ItemStack> list = Lists.newArrayList();
list.add(new ItemStack(ItemLoader.kineticMultiTool));
return list;
}
@Override
public List<List<ItemStack>> getExampleExpansions() {
List<List<ItemStack>> lists = Lists.newArrayList();
List<ItemStack> list = Lists.newArrayList();
list.add(new ItemStack(ItemLoader.goldStick));
list.add(new ItemStack(ItemLoader.toolUpgradeDrill));
lists.add(list);
return lists;
}
@Override
public List<ItemStack> getExampleOutput() {
List<ItemStack> list = Lists.newArrayList();
list.add(new ItemStack(ItemLoader.kineticMultiTool));
return list;
}
@Override
public boolean isValidInput(ItemStack input) {
if (input != null && input.getItem() != null && input.stackSize > 0 && input.getItem() instanceof ItemKineticMultiTool) {
for (IKineticToolUpgrade upgrade : upgrades) {
if (upgrade.canUpgradeBeApplied(input))
return true;
}
}
return false;
}
@Override
public boolean isValidExpansion(ItemStack input, ItemStack expansion) {
if (input != null && input.getItem() != null && input.stackSize > 0 && input.getItem() instanceof ItemKineticMultiTool && expansion != null && expansion.getItem() != null && expansion.stackSize > 0) {
for (IKineticToolUpgrade upgrade : upgrades) {
if (upgrade.canUpgradeBeApplied(input) && upgrade.doesExpansionMatch(expansion))
return true;
}
}
return false;
}
@Override
public ItemStack craft(ItemStack input, List<ItemStack> expansions, boolean preview) {
if (input == null || input.getItem() == null || input.stackSize <= 0)
return null;
if (expansions.size() != 1)
return null;
ItemStack expansion = expansions.get(0);
if (expansion == null || expansion.getItem() == null || expansion.stackSize <= 0)
return null;
for (IKineticToolUpgrade upgrade : upgrades) {
if (!upgrade.canUpgradeBeApplied(input) || !upgrade.doesExpansionMatch(expansion))
continue;
if (!preview)
expansion.stackSize--;
ItemStack output = input.copy();
output.stackSize = 1;
upgrade.install(output);
return output;
}
return null;
}
@Override
public int getMaximumExpansionCount(ItemStack input) {
return 1;
}
}