2022-02-15 19:03:43 +03:00
|
|
|
package ab.api.recipe;
|
|
|
|
|
|
|
|
|
|
import java.util.ArrayList;
|
|
|
|
|
import java.util.List;
|
|
|
|
|
|
|
|
|
|
import net.minecraft.inventory.IInventory;
|
|
|
|
|
import net.minecraft.item.ItemStack;
|
|
|
|
|
|
|
|
|
|
public class RecipeAdvancedPlate {
|
|
|
|
|
|
|
|
|
|
private ItemStack output;
|
2022-02-20 16:31:36 +03:00
|
|
|
private int color;
|
2022-02-15 19:03:43 +03:00
|
|
|
private List<ItemStack> inputs;
|
|
|
|
|
private int mana;
|
|
|
|
|
|
2022-02-20 16:31:36 +03:00
|
|
|
public RecipeAdvancedPlate(ItemStack output, int mana, int color, ItemStack... inputs) {
|
2022-02-15 19:03:43 +03:00
|
|
|
this.output = output;
|
|
|
|
|
this.mana = mana;
|
2022-02-20 16:31:36 +03:00
|
|
|
this.color = color;
|
2022-02-15 19:03:43 +03:00
|
|
|
List<ItemStack> inputsToSet = new ArrayList();
|
|
|
|
|
for (ItemStack obj : inputs)
|
|
|
|
|
inputsToSet.add(obj);
|
|
|
|
|
this.inputs = inputsToSet;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public List<ItemStack> getInputs() {
|
|
|
|
|
return new ArrayList(this.inputs);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public ItemStack getOutput() {
|
|
|
|
|
return this.output;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public int getManaUsage() {
|
|
|
|
|
return this.mana;
|
|
|
|
|
}
|
|
|
|
|
|
2022-02-20 16:31:36 +03:00
|
|
|
public int getColor() {
|
|
|
|
|
return this.color;
|
|
|
|
|
}
|
|
|
|
|
|
2022-02-15 19:03:43 +03:00
|
|
|
public boolean matches(IInventory inv) {
|
|
|
|
|
List<ItemStack> inputsMissing = new ArrayList(this.inputs);
|
|
|
|
|
for (int i = 1; i < inv.getSizeInventory(); i++) {
|
|
|
|
|
ItemStack stack = inv.getStackInSlot(i);
|
|
|
|
|
if (stack == null)
|
|
|
|
|
break;
|
|
|
|
|
int stackIndex = -1;
|
|
|
|
|
for (int j = 0; j < inputsMissing.size(); j++) {
|
|
|
|
|
ItemStack input = inputsMissing.get(j);
|
|
|
|
|
if (input instanceof ItemStack && simpleAreStacksEqual(input.copy(), stack)) {
|
|
|
|
|
stackIndex = j;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if (stackIndex != -1) {
|
|
|
|
|
inputsMissing.remove(stackIndex);
|
|
|
|
|
} else {
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return inputsMissing.isEmpty();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
boolean simpleAreStacksEqual(ItemStack input, ItemStack stack) {
|
|
|
|
|
if(input.getItemDamage() == 32767)
|
|
|
|
|
input.setItemDamage(stack.getItemDamage());
|
|
|
|
|
return (input.getItem() == stack.getItem() && input.getItemDamage() == stack.getItemDamage());
|
|
|
|
|
}
|
|
|
|
|
}
|