Give back correct items on oredict craft

This commit is contained in:
Raoul Van den Berge
2016-10-11 22:11:06 +02:00
parent cd3bd045c3
commit 5ccd3dfe2e
3 changed files with 50 additions and 4 deletions

View File

@@ -43,6 +43,12 @@ public interface ICraftingPattern {
*/ */
List<ItemStack> getOutputs(); List<ItemStack> getOutputs();
/**
* @param took the items took
* @return the outputs based on the items took
*/
List<ItemStack> getByproducts(ItemStack[] took);
/** /**
* @return the byproducts * @return the byproducts
*/ */

View File

@@ -17,6 +17,7 @@ import java.util.ArrayList;
import java.util.List; import java.util.List;
public class CraftingPattern implements ICraftingPattern { public class CraftingPattern implements ICraftingPattern {
private World world;
private ICraftingPatternContainer container; private ICraftingPatternContainer container;
private ItemStack stack; private ItemStack stack;
private List<ItemStack> inputs = new ArrayList<>(); private List<ItemStack> inputs = new ArrayList<>();
@@ -24,6 +25,7 @@ public class CraftingPattern implements ICraftingPattern {
private List<ItemStack> byproducts = new ArrayList<>(); private List<ItemStack> byproducts = new ArrayList<>();
public CraftingPattern(World world, ICraftingPatternContainer container, ItemStack stack) { public CraftingPattern(World world, ICraftingPatternContainer container, ItemStack stack) {
this.world = world;
this.container = container; this.container = container;
this.stack = stack; this.stack = stack;
@@ -98,6 +100,30 @@ public class CraftingPattern implements ICraftingPattern {
return outputs; return outputs;
} }
@Override
public List<ItemStack> getByproducts(ItemStack[] took) {
List<ItemStack> byproducts = new ArrayList<>();
InventoryCrafting inv = new InventoryCrafting(new Container() {
@Override
public boolean canInteractWith(EntityPlayer player) {
return false;
}
}, 3, 3);
for (int i = 0; i < 9; ++i) {
inv.setInventorySlotContents(i, took[i]);
}
for (ItemStack remaining : CraftingManager.getInstance().getRemainingItems(inv, world)) {
if (remaining != null) {
byproducts.add(remaining.copy());
}
}
return byproducts;
}
@Override @Override
public List<ItemStack> getByproducts() { public List<ItemStack> getByproducts() {
return byproducts; return byproducts;

View File

@@ -65,11 +65,13 @@ public class CraftingTask implements ICraftingTask {
} }
for (ItemStack extra : extras.getStacks()) { for (ItemStack extra : extras.getStacks()) {
toInsert.add(extra.copy()); toInsert.add(extra);
} }
} }
private void calculate(IItemStackList list, ICraftingPattern pattern, boolean basePattern) { private void calculate(IItemStackList list, ICraftingPattern pattern, boolean basePattern) {
ItemStack[] took = new ItemStack[9];
if (pattern.isProcessing()) { if (pattern.isProcessing()) {
toProcess.add(new Processable(pattern)); toProcess.add(new Processable(pattern));
} }
@@ -78,13 +80,19 @@ public class CraftingTask implements ICraftingTask {
addExtras(pattern); addExtras(pattern);
} }
for (ItemStack input : pattern.getInputs()) { for (int i = 0; i < pattern.getInputs().size(); ++i) {
ItemStack input = pattern.getInputs().get(i);
ItemStack inputInNetwork = list.get(input, compare); ItemStack inputInNetwork = list.get(input, compare);
if (inputInNetwork == null || inputInNetwork.stackSize == 0) { if (inputInNetwork == null || inputInNetwork.stackSize == 0) {
ItemStack extra = extras.get(input, compare); ItemStack extra = extras.get(input, compare);
if (extra != null) { if (extra != null) {
if (!pattern.isProcessing()) {
took[i] = ItemHandlerHelper.copyStackWithSize(extra, 1);
}
decrOrRemoveExtras(extra); decrOrRemoveExtras(extra);
} else { } else {
ICraftingPattern inputPattern = network.getPattern(input, compare); ICraftingPattern inputPattern = network.getPattern(input, compare);
@@ -126,14 +134,18 @@ public class CraftingTask implements ICraftingTask {
} }
} else { } else {
if (!pattern.isProcessing()) { if (!pattern.isProcessing()) {
toTake.add(input); ItemStack take = ItemHandlerHelper.copyStackWithSize(inputInNetwork, 1);
toTake.add(take);
took[i] = take;
} }
list.remove(inputInNetwork, 1, true); list.remove(inputInNetwork, 1, true);
} }
} }
for (ItemStack byproduct : pattern.getByproducts()) { for (ItemStack byproduct : (pattern.isOredict() ? pattern.getByproducts(took) : pattern.getByproducts())) {
extras.add(byproduct.copy()); extras.add(byproduct.copy());
} }
} }
@@ -149,6 +161,8 @@ public class CraftingTask implements ICraftingTask {
"\n, toTakeFluids=" + toTakeFluids + "\n, toTakeFluids=" + toTakeFluids +
"\n, toCraft=" + toCraft + "\n, toCraft=" + toCraft +
"\n, toProcess=" + toProcess + "\n, toProcess=" + toProcess +
"\n, extras=" + extras +
"\n, toInsert=" + toInsert +
"\n, missing=" + missing + "\n, missing=" + missing +
'}'; '}';
} }