Implement processing patterns completely
This commit is contained in:
		| @@ -8,7 +8,6 @@ import refinedstorage.api.autocrafting.ICraftingPattern; | |||||||
| import refinedstorage.api.autocrafting.registry.ICraftingTaskFactory; | import refinedstorage.api.autocrafting.registry.ICraftingTaskFactory; | ||||||
| import refinedstorage.api.autocrafting.task.ICraftingTask; | import refinedstorage.api.autocrafting.task.ICraftingTask; | ||||||
| import refinedstorage.apiimpl.autocrafting.task.CraftingTask; | import refinedstorage.apiimpl.autocrafting.task.CraftingTask; | ||||||
| import refinedstorage.apiimpl.autocrafting.task.CraftingTaskNormal; |  | ||||||
| import refinedstorage.apiimpl.autocrafting.task.CraftingTaskProcessing; | import refinedstorage.apiimpl.autocrafting.task.CraftingTaskProcessing; | ||||||
|  |  | ||||||
| import javax.annotation.Nonnull; | import javax.annotation.Nonnull; | ||||||
| @@ -26,8 +25,9 @@ public class CraftingTaskFactoryProcessing implements ICraftingTaskFactory { | |||||||
|  |  | ||||||
|         if (tag != null) { |         if (tag != null) { | ||||||
|             task.setChildrenCreated(CraftingTask.readBooleanArray(tag, CraftingTask.NBT_CHILDREN_CREATED)); |             task.setChildrenCreated(CraftingTask.readBooleanArray(tag, CraftingTask.NBT_CHILDREN_CREATED)); | ||||||
|             task.setSatisfied(CraftingTask.readBooleanArray(tag, CraftingTaskNormal.NBT_SATISFIED)); |             task.setSatisfied(CraftingTask.readBooleanArray(tag, CraftingTaskProcessing.NBT_SATISFIED)); | ||||||
|             task.setChecked(CraftingTask.readBooleanArray(tag, CraftingTaskNormal.NBT_CHECKED)); |             task.setSatisfiedInsertion(CraftingTask.readBooleanArray(tag, CraftingTaskProcessing.NBT_SATISFIED_INSERTION)); | ||||||
|  |             task.setChecked(CraftingTask.readBooleanArray(tag, CraftingTaskProcessing.NBT_CHECKED)); | ||||||
|  |  | ||||||
|             List<ItemStack> took = new ArrayList<>(); |             List<ItemStack> took = new ArrayList<>(); | ||||||
|  |  | ||||||
|   | |||||||
| @@ -8,18 +8,22 @@ import refinedstorage.api.autocrafting.ICraftingPattern; | |||||||
| import refinedstorage.api.autocrafting.ICraftingPatternContainer; | import refinedstorage.api.autocrafting.ICraftingPatternContainer; | ||||||
| import refinedstorage.api.network.INetworkMaster; | import refinedstorage.api.network.INetworkMaster; | ||||||
| import refinedstorage.api.network.NetworkUtils; | import refinedstorage.api.network.NetworkUtils; | ||||||
|  | import refinedstorage.api.storage.CompareUtils; | ||||||
|  |  | ||||||
| public class CraftingTaskProcessing extends CraftingTask { | public class CraftingTaskProcessing extends CraftingTask { | ||||||
|     public static final String NBT_SATISFIED = "Satisfied"; |     public static final String NBT_SATISFIED = "Satisfied"; | ||||||
|  |     public static final String NBT_SATISFIED_INSERTION = "SatisfiedInsertion"; | ||||||
|     public static final String NBT_CHECKED = "Checked"; |     public static final String NBT_CHECKED = "Checked"; | ||||||
|  |  | ||||||
|     private boolean satisfied[]; |     private boolean satisfied[]; | ||||||
|  |     private boolean satisfiedInsertion[]; | ||||||
|     private boolean checked[]; |     private boolean checked[]; | ||||||
|  |  | ||||||
|     public CraftingTaskProcessing(ICraftingPattern pattern) { |     public CraftingTaskProcessing(ICraftingPattern pattern) { | ||||||
|         super(pattern); |         super(pattern); | ||||||
|  |  | ||||||
|         this.satisfied = new boolean[pattern.getInputs().length]; |         this.satisfied = new boolean[pattern.getInputs().length]; | ||||||
|  |         this.satisfiedInsertion = new boolean[pattern.getInputs().length]; | ||||||
|         this.checked = new boolean[pattern.getInputs().length]; |         this.checked = new boolean[pattern.getInputs().length]; | ||||||
|     } |     } | ||||||
|  |  | ||||||
| @@ -27,6 +31,10 @@ public class CraftingTaskProcessing extends CraftingTask { | |||||||
|         this.satisfied = satisfied; |         this.satisfied = satisfied; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     public void setSatisfiedInsertion(boolean[] satisfiedInsertion) { | ||||||
|  |         this.satisfiedInsertion = satisfiedInsertion; | ||||||
|  |     } | ||||||
|  |  | ||||||
|     public void setChecked(boolean[] checked) { |     public void setChecked(boolean[] checked) { | ||||||
|         this.checked = checked; |         this.checked = checked; | ||||||
|     } |     } | ||||||
| @@ -59,9 +67,9 @@ public class CraftingTaskProcessing extends CraftingTask { | |||||||
|             return false; |             return false; | ||||||
|         } |         } | ||||||
|  |  | ||||||
|  |         if (!took.isEmpty()) { | ||||||
|             ICraftingPatternContainer container = pattern.getContainer(world); |             ICraftingPatternContainer container = pattern.getContainer(world); | ||||||
|  |  | ||||||
|         if (!took.isEmpty()) { |  | ||||||
|             ItemStack toInsert = took.get(0); |             ItemStack toInsert = took.get(0); | ||||||
|  |  | ||||||
|             if (ItemHandlerHelper.insertItem(container.getConnectedItems(), toInsert, true) == null) { |             if (ItemHandlerHelper.insertItem(container.getConnectedItems(), toInsert, true) == null) { | ||||||
| @@ -71,6 +79,36 @@ public class CraftingTaskProcessing extends CraftingTask { | |||||||
|             } |             } | ||||||
|         } |         } | ||||||
|  |  | ||||||
|  |         return isDone(); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     private boolean isDone() { | ||||||
|  |         for (boolean item : satisfiedInsertion) { | ||||||
|  |             if (!item) { | ||||||
|  |                 return false; | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         return true; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public boolean onInserted(ItemStack stack) { | ||||||
|  |         if (isDone()) { | ||||||
|  |             return false; | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         for (int i = 0; i < pattern.getOutputs().length; ++i) { | ||||||
|  |             ItemStack output = pattern.getOutputs()[i]; | ||||||
|  |  | ||||||
|  |             if (!satisfiedInsertion[i]) { | ||||||
|  |                 if (CompareUtils.compareStackNoQuantity(output, stack)) { | ||||||
|  |                     satisfiedInsertion[i] = true; | ||||||
|  |  | ||||||
|  |                     return true; | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |  | ||||||
|         return false; |         return false; | ||||||
|     } |     } | ||||||
|  |  | ||||||
| @@ -79,6 +117,7 @@ public class CraftingTaskProcessing extends CraftingTask { | |||||||
|         super.writeToNBT(tag); |         super.writeToNBT(tag); | ||||||
|  |  | ||||||
|         writeBooleanArray(tag, NBT_SATISFIED, satisfied); |         writeBooleanArray(tag, NBT_SATISFIED, satisfied); | ||||||
|  |         writeBooleanArray(tag, NBT_SATISFIED_INSERTION, satisfiedInsertion); | ||||||
|         writeBooleanArray(tag, NBT_CHECKED, checked); |         writeBooleanArray(tag, NBT_CHECKED, checked); | ||||||
|  |  | ||||||
|         return tag; |         return tag; | ||||||
|   | |||||||
| @@ -32,6 +32,7 @@ import refinedstorage.api.storage.fluid.IGroupedFluidStorage; | |||||||
| import refinedstorage.api.storage.item.IGroupedItemStorage; | import refinedstorage.api.storage.item.IGroupedItemStorage; | ||||||
| import refinedstorage.api.storage.item.IItemStorage; | import refinedstorage.api.storage.item.IItemStorage; | ||||||
| import refinedstorage.apiimpl.autocrafting.CraftingPattern; | import refinedstorage.apiimpl.autocrafting.CraftingPattern; | ||||||
|  | import refinedstorage.apiimpl.autocrafting.task.CraftingTaskProcessing; | ||||||
| import refinedstorage.apiimpl.network.NetworkNodeGraph; | import refinedstorage.apiimpl.network.NetworkNodeGraph; | ||||||
| import refinedstorage.apiimpl.network.WirelessGridHandler; | import refinedstorage.apiimpl.network.WirelessGridHandler; | ||||||
| import refinedstorage.apiimpl.network.grid.FluidGridHandler; | import refinedstorage.apiimpl.network.grid.FluidGridHandler; | ||||||
| @@ -558,26 +559,33 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR | |||||||
|             } |             } | ||||||
|         } |         } | ||||||
|  |  | ||||||
|  |  | ||||||
|         // @TODO: Processing crafting tasks |  | ||||||
|  |  | ||||||
|         int inserted = remainder != null ? (orginalSize - remainder.stackSize) : orginalSize; |         int inserted = remainder != null ? (orginalSize - remainder.stackSize) : orginalSize; | ||||||
|  |  | ||||||
|         if (!simulate && inserted > 0) { |         if (!simulate && inserted > 0) { | ||||||
|             /*for (int i = 0; i < inserted; ++i) { |  | ||||||
|                 if (!craftingTasks.empty() && craftingTasks.peek() instanceof ProcessingCraftingTask) { |  | ||||||
|                     if (((ProcessingCraftingTask) craftingTasks.peek()).onInserted(stack)) { |  | ||||||
|                         updateTopCraftingTask(false); |  | ||||||
|                     } |  | ||||||
|                 } |  | ||||||
|             }*/ |  | ||||||
|  |  | ||||||
|             itemStorage.add(ItemHandlerHelper.copyStackWithSize(stack, inserted), false); |             itemStorage.add(ItemHandlerHelper.copyStackWithSize(stack, inserted), false); | ||||||
|  |  | ||||||
|  |             for (int i = 0; i < inserted; ++i) { | ||||||
|  |                 for (ICraftingTask task : craftingTasks) { | ||||||
|  |                     if (checkProcessing(stack, task)) { | ||||||
|  |                         inserted--; | ||||||
|  |                     } | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         return remainder; |         return remainder; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     private boolean checkProcessing(ItemStack stack, ICraftingTask task) { | ||||||
|  |         if (task.getChild() instanceof CraftingTaskProcessing) { | ||||||
|  |             if (checkProcessing(stack, task.getChild())) { | ||||||
|  |                 return true; | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         return task instanceof CraftingTaskProcessing && ((CraftingTaskProcessing) task).onInserted(stack); | ||||||
|  |     } | ||||||
|  |  | ||||||
|     @Override |     @Override | ||||||
|     public ItemStack extractItem(ItemStack stack, int size, int flags) { |     public ItemStack extractItem(ItemStack stack, int size, int flags) { | ||||||
|         int requested = size; |         int requested = size; | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Raoul Van den Berge
					Raoul Van den Berge