diff --git a/src/main/java/com/raoulvdberge/refinedstorage/api/autocrafting/ICraftingManager.java b/src/main/java/com/raoulvdberge/refinedstorage/api/autocrafting/ICraftingManager.java index 09f89fa73..872193715 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/api/autocrafting/ICraftingManager.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/api/autocrafting/ICraftingManager.java @@ -68,12 +68,12 @@ public interface ICraftingManager { /** * Schedules a crafting task if the task isn't scheduled yet. * - * @param stack the stack - * @param toSchedule the amount of tasks to schedule + * @param stack the stack + * @param amount the amount of items to request * @return the crafting task created, or null if no task is created */ @Nullable - ICraftingTask schedule(ItemStack stack, int toSchedule); + ICraftingTask request(ItemStack stack, int amount); /** * Tracks an incoming stack. diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/CraftingManager.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/CraftingManager.java index e92655085..4f3d3d54d 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/CraftingManager.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/CraftingManager.java @@ -200,15 +200,15 @@ public class CraftingManager implements ICraftingManager { @Override @Nullable - public ICraftingTask schedule(ItemStack stack, int toSchedule) { + public ICraftingTask request(ItemStack stack, int amount) { for (ICraftingTask task : getTasks()) { if (API.instance().getComparer().isEqualNoQuantity(task.getRequested(), stack)) { - toSchedule -= task.getQuantity(); + amount -= task.getQuantity(); } } - if (toSchedule > 0) { - ICraftingTask task = create(stack, toSchedule); + if (amount > 0) { + ICraftingTask task = create(stack, amount); if (task != null) { ICraftingTaskError error = task.calculate(); diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/CraftingRequester.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/CraftingRequester.java deleted file mode 100644 index f1f161e79..000000000 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/CraftingRequester.java +++ /dev/null @@ -1,84 +0,0 @@ -package com.raoulvdberge.refinedstorage.apiimpl.autocrafting; - -import com.raoulvdberge.refinedstorage.api.autocrafting.task.ICraftingTask; -import com.raoulvdberge.refinedstorage.api.autocrafting.task.ICraftingTaskError; -import com.raoulvdberge.refinedstorage.api.network.INetwork; -import com.raoulvdberge.refinedstorage.api.network.node.INetworkNode; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; - -import java.util.UUID; - -public class CraftingRequester { - private static final String NBT_TASK_ID = "TaskId"; - private static final String NBT_ALLOW_REQUEST = "AllowRequest"; - - private UUID taskId; - private INetworkNode node; - private boolean allowRequest = true; - - public CraftingRequester(INetworkNode node) { - this.node = node; - } - - public void request(ItemStack stack, int quantity) { - INetwork network = node.getNetwork(); - - if (network != null) { - if (taskId != null && network.getCraftingManager().getTask(taskId) == null) { - this.taskId = null; - - this.node.markDirty(); - } - - // Only allow a request if we have no current task running. - // Only allow a request if we received all items from a previous request. - // We can only check if we received all items with a flag, because there is a delay in finishing the task - // and actually receiving the items. - if (taskId == null && allowRequest) { - ICraftingTask task = network.getCraftingManager().create(stack, quantity); - - if (task != null) { - ICraftingTaskError error = task.calculate(); - - if (error == null) { - network.getCraftingManager().add(task); - - this.allowRequest = false; - this.taskId = task.getId(); - - this.node.markDirty(); - } - } - } - } - } - - public void setAllowRequest() { - if (!allowRequest) { - this.allowRequest = true; - - this.node.markDirty(); - } - } - - public void readFromNbt(NBTTagCompound tag) { - if (tag.hasUniqueId(NBT_TASK_ID)) { - taskId = tag.getUniqueId(NBT_TASK_ID); - } - - allowRequest = tag.getBoolean(NBT_ALLOW_REQUEST); - } - - public NBTTagCompound writeToNbt() { - NBTTagCompound tag = new NBTTagCompound(); - - if (taskId != null) { - tag.setUniqueId(NBT_TASK_ID, taskId); - } - - tag.setBoolean(NBT_ALLOW_REQUEST, allowRequest); - - return tag; - } -} diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeConstructor.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeConstructor.java index 30f9ee8fa..b1e2b8671 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeConstructor.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeConstructor.java @@ -223,7 +223,7 @@ public class NetworkNodeConstructor extends NetworkNode implements IComparable, } else if (upgrades.hasUpgrade(ItemUpgrade.TYPE_CRAFTING)) { ItemStack craft = itemFilters.getStackInSlot(0); - network.getCraftingManager().schedule(craft, 1); + network.getCraftingManager().request(craft, 1); } } @@ -235,7 +235,7 @@ public class NetworkNodeConstructor extends NetworkNode implements IComparable, } else if (upgrades.hasUpgrade(ItemUpgrade.TYPE_CRAFTING)) { ItemStack craft = itemFilters.getStackInSlot(0); - network.getCraftingManager().schedule(craft, 1); + network.getCraftingManager().request(craft, 1); } } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeExporter.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeExporter.java index a3c4e0ecd..e3439d727 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeExporter.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeExporter.java @@ -87,7 +87,7 @@ public class NetworkNodeExporter extends NetworkNode implements IComparable, ITy if (took == null) { if (upgrades.hasUpgrade(ItemUpgrade.TYPE_CRAFTING)) { - network.getCraftingManager().schedule(slot, stackSize); + network.getCraftingManager().request(slot, stackSize); } } else if (ItemHandlerHelper.insertItem(handler, took, true).isEmpty()) { took = network.extractItem(slot, Math.min(slot.getMaxStackSize(), stackSize), compare, Action.PERFORM); diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeInterface.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeInterface.java index 71fac1525..3f091f5c7 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeInterface.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeInterface.java @@ -4,7 +4,6 @@ import com.raoulvdberge.refinedstorage.RS; import com.raoulvdberge.refinedstorage.api.util.Action; import com.raoulvdberge.refinedstorage.api.util.IComparer; import com.raoulvdberge.refinedstorage.apiimpl.API; -import com.raoulvdberge.refinedstorage.apiimpl.autocrafting.CraftingRequester; import com.raoulvdberge.refinedstorage.apiimpl.storage.externalstorage.StorageExternalItem; import com.raoulvdberge.refinedstorage.inventory.ItemHandlerBase; import com.raoulvdberge.refinedstorage.inventory.ItemHandlerListenerNetworkNode; @@ -24,7 +23,6 @@ public class NetworkNodeInterface extends NetworkNode implements IComparable { public static final String ID = "interface"; private static final String NBT_COMPARE = "Compare"; - private static final String NBT_REQUESTER = "Requester"; private ItemHandlerBase importItems = new ItemHandlerBase(9, new ItemHandlerListenerNetworkNode(this)); @@ -39,8 +37,6 @@ public class NetworkNodeInterface extends NetworkNode implements IComparable { private int currentSlot = 0; - private CraftingRequester requester = new CraftingRequester(this); - public NetworkNodeInterface(World world, BlockPos pos) { super(world, pos); } @@ -109,7 +105,7 @@ public class NetworkNodeInterface extends NetworkNode implements IComparable { delta -= result == null ? 0 : result.getCount(); if (delta > 0 && upgrades.hasUpgrade(ItemUpgrade.TYPE_CRAFTING)) { - requester.request(wanted, delta); + network.getCraftingManager().request(wanted, delta); } } else if (delta < 0) { ItemStack remainder = network.insertItemTracked(got, Math.abs(delta)); @@ -119,8 +115,6 @@ public class NetworkNodeInterface extends NetworkNode implements IComparable { } else { exportItems.extractItem(i, Math.abs(delta) - remainder.getCount(), false); } - } else { - requester.setAllowRequest(); } } } @@ -145,10 +139,6 @@ public class NetworkNodeInterface extends NetworkNode implements IComparable { StackUtils.readItems(importItems, 0, tag); StackUtils.readItems(exportItems, 2, tag); StackUtils.readItems(upgrades, 3, tag); - - if (tag.hasKey(NBT_REQUESTER)) { - requester.readFromNbt(tag.getCompoundTag(NBT_REQUESTER)); - } } @Override @@ -164,8 +154,6 @@ public class NetworkNodeInterface extends NetworkNode implements IComparable { StackUtils.writeItems(exportItems, 2, tag); StackUtils.writeItems(upgrades, 3, tag); - tag.setTag(NBT_REQUESTER, requester.writeToNbt()); - return tag; } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/storage/externalstorage/StorageExternalItem.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/storage/externalstorage/StorageExternalItem.java index 86cfa1846..44a30df3a 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/storage/externalstorage/StorageExternalItem.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/storage/externalstorage/StorageExternalItem.java @@ -71,7 +71,9 @@ public class StorageExternalItem implements IStorageExternal { // If the cached is empty and the actual isn't, we added this item network.getItemStorageCache().add(actual, actual.getCount(), false, true); - network.getCraftingManager().track(actual, actual.getCount()); + if (!isConnectedToInterface()) { + network.getCraftingManager().track(actual, actual.getCount()); + } } else if (cached.isEmpty() && actual.isEmpty()) { // If they're both empty, nothing happens } else if (!API.instance().getComparer().isEqualNoQuantity(cached, actual)) { @@ -79,14 +81,18 @@ public class StorageExternalItem implements IStorageExternal { network.getItemStorageCache().remove(cached, cached.getCount(), true); network.getItemStorageCache().add(actual, actual.getCount(), false, true); - network.getCraftingManager().track(actual, actual.getCount()); + if (!isConnectedToInterface()) { + network.getCraftingManager().track(actual, actual.getCount()); + } } else if (cached.getCount() != actual.getCount()) { int delta = actual.getCount() - cached.getCount(); if (delta > 0) { network.getItemStorageCache().add(actual, delta, false, true); - network.getCraftingManager().track(actual, delta); + if (!isConnectedToInterface()) { + network.getCraftingManager().track(actual, delta); + } } else { network.getItemStorageCache().remove(actual, Math.abs(delta), true); }