generated from tilera/1710mod
139 lines
4.5 KiB
Java
139 lines
4.5 KiB
Java
package com.eloraam.redpower.core;
|
|
|
|
import java.util.ArrayList;
|
|
import java.util.Arrays;
|
|
import java.util.HashMap;
|
|
import java.util.HashSet;
|
|
import java.util.List;
|
|
import net.minecraft.item.ItemStack;
|
|
import net.minecraft.item.crafting.CraftingManager;
|
|
import net.minecraftforge.oredict.OreDictionary;
|
|
import net.minecraftforge.oredict.ShapedOreRecipe;
|
|
import net.minecraftforge.oredict.ShapelessOreRecipe;
|
|
|
|
public class CraftLib {
|
|
public static List<List<Object>> alloyRecipes = new ArrayList();
|
|
public static HashSet damageOnCraft = new HashSet();
|
|
public static HashMap damageContainer = new HashMap();
|
|
|
|
public static void addAlloyResult(ItemStack output, Object... input) {
|
|
alloyRecipes.add(Arrays.asList(input, output));
|
|
}
|
|
|
|
public static void addOreRecipe(ItemStack output, Object... input) {
|
|
CraftingManager.getInstance().getRecipeList().add(new ShapedOreRecipe(output, new Object[]{Boolean.TRUE, input}));
|
|
}
|
|
|
|
public static void addShapelessOreRecipe(ItemStack output, Object... input) {
|
|
CraftingManager.getInstance().getRecipeList().add(new ShapelessOreRecipe(output, input));
|
|
}
|
|
|
|
public static boolean isOreClass(ItemStack ist, String ore) {
|
|
for(ItemStack stack : OreDictionary.getOres(ore)) {
|
|
if (stack.isItemEqual(ist)) {
|
|
return true;
|
|
}
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
public static ItemStack getAlloyResult(ItemStack[] input, int start, int end, boolean take) {
|
|
label134:
|
|
for(List<Object> l : alloyRecipes) {
|
|
Object[] ob = l.toArray();
|
|
Object[] ipt = (Object[]) ob[0];
|
|
|
|
for(Object ingredient : ipt) {
|
|
if (ingredient instanceof ItemStack) {
|
|
ItemStack inputStack = (ItemStack)ingredient;
|
|
int rc = inputStack.stackSize;
|
|
|
|
for(int i = start; i < end; ++i) {
|
|
if (input[i] != null) {
|
|
if (input[i].isItemEqual(inputStack)) {
|
|
rc -= input[i].stackSize;
|
|
}
|
|
|
|
if (rc <= 0) {
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
if (rc > 0) {
|
|
continue label134;
|
|
}
|
|
} else if (ingredient instanceof OreStack) {
|
|
OreStack inputStack = (OreStack)ingredient;
|
|
int rc = inputStack.quantity;
|
|
|
|
for(int i = start; i < end; ++i) {
|
|
if (input[i] != null) {
|
|
if (isOreClass(input[i], inputStack.material)) {
|
|
rc -= input[i].stackSize;
|
|
}
|
|
|
|
if (rc <= 0) {
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
if (rc > 0) {
|
|
continue label134;
|
|
}
|
|
}
|
|
}
|
|
|
|
if (take) {
|
|
for(Object ingredient : ipt) {
|
|
if (ingredient instanceof ItemStack) {
|
|
ItemStack inputStack = (ItemStack)ingredient;
|
|
int rc = inputStack.stackSize;
|
|
|
|
for(int i = start; i < end; ++i) {
|
|
if (input[i] != null && input[i].isItemEqual(inputStack)) {
|
|
rc -= input[i].stackSize;
|
|
if (rc < 0) {
|
|
input[i].stackSize = -rc;
|
|
} else if (input[i].getItem().hasContainerItem()) {
|
|
input[i] = new ItemStack(input[i].getItem().getContainerItem());
|
|
} else {
|
|
input[i] = null;
|
|
}
|
|
|
|
if (rc <= 0) {
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
} else if (ingredient instanceof OreStack) {
|
|
OreStack inputStack = (OreStack)ingredient;
|
|
int rc = inputStack.quantity;
|
|
|
|
for(int i = start; i < end; ++i) {
|
|
if (input[i] != null && isOreClass(input[i], inputStack.material)) {
|
|
rc -= input[i].stackSize;
|
|
if (rc < 0) {
|
|
input[i].stackSize = -rc;
|
|
} else {
|
|
input[i] = null;
|
|
}
|
|
|
|
if (rc <= 0) {
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
return (ItemStack)ob[1];
|
|
}
|
|
|
|
return null;
|
|
}
|
|
}
|