92 lines
2.5 KiB
Java
92 lines
2.5 KiB
Java
package thaumcraft.api.crafting;
|
|
|
|
import java.util.ArrayList;
|
|
|
|
import net.minecraft.item.ItemStack;
|
|
import net.minecraftforge.oredict.OreDictionary;
|
|
import thaumcraft.api.ThaumcraftApiHelper;
|
|
import thaumcraft.api.aspects.Aspect;
|
|
import thaumcraft.api.aspects.AspectList;
|
|
|
|
public class CrucibleRecipe {
|
|
|
|
private ItemStack recipeOutput;
|
|
|
|
public Object catalyst;
|
|
public AspectList aspects;
|
|
public String key;
|
|
|
|
public int hash;
|
|
|
|
public CrucibleRecipe(String researchKey, ItemStack result, Object cat, AspectList tags) {
|
|
recipeOutput = result;
|
|
this.aspects = tags;
|
|
this.key = researchKey;
|
|
this.catalyst = cat;
|
|
if (cat instanceof String) {
|
|
this.catalyst = OreDictionary.getOres((String) cat);
|
|
}
|
|
String hc = researchKey + result.toString();
|
|
for (Aspect tag:tags.getAspects()) {
|
|
hc += tag.getTag()+tags.getAmount(tag);
|
|
}
|
|
if (cat instanceof ItemStack) {
|
|
hc += ((ItemStack)cat).toString();
|
|
} else
|
|
if (cat instanceof ArrayList && ((ArrayList<ItemStack>)catalyst).size()>0) {
|
|
for (ItemStack is :(ArrayList<ItemStack>)catalyst) {
|
|
hc += is.toString();
|
|
}
|
|
}
|
|
|
|
hash = hc.hashCode();
|
|
}
|
|
|
|
|
|
|
|
public boolean matches(AspectList itags, ItemStack cat) {
|
|
if (catalyst instanceof ItemStack &&
|
|
!ThaumcraftApiHelper.itemMatches((ItemStack) catalyst,cat,false)) {
|
|
return false;
|
|
} else
|
|
if (catalyst instanceof ArrayList && ((ArrayList<ItemStack>)catalyst).size()>0) {
|
|
ItemStack[] ores = ((ArrayList<ItemStack>)catalyst).toArray(new ItemStack[]{});
|
|
if (!ThaumcraftApiHelper.containsMatch(false, new ItemStack[]{cat},ores)) return false;
|
|
}
|
|
if (itags==null) return false;
|
|
for (Aspect tag:aspects.getAspects()) {
|
|
if (itags.getAmount(tag)<aspects.getAmount(tag)) return false;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
public boolean catalystMatches(ItemStack cat) {
|
|
if (catalyst instanceof ItemStack && ThaumcraftApiHelper.itemMatches((ItemStack) catalyst,cat,false)) {
|
|
return true;
|
|
} else
|
|
if (catalyst instanceof ArrayList && ((ArrayList<ItemStack>)catalyst).size()>0) {
|
|
ItemStack[] ores = ((ArrayList<ItemStack>)catalyst).toArray(new ItemStack[]{});
|
|
if (ThaumcraftApiHelper.containsMatch(false, new ItemStack[]{cat},ores)) return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
public AspectList removeMatching(AspectList itags) {
|
|
AspectList temptags = new AspectList();
|
|
temptags.aspects.putAll(itags.aspects);
|
|
|
|
for (Aspect tag:aspects.getAspects()) {
|
|
temptags.remove(tag, aspects.getAmount(tag));
|
|
}
|
|
|
|
itags = temptags;
|
|
return itags;
|
|
}
|
|
|
|
public ItemStack getRecipeOutput() {
|
|
return recipeOutput;
|
|
}
|
|
|
|
|
|
}
|