From 29a309b202158a47c888f927cc548e27c81c607b Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Thu, 1 Sep 2016 22:07:05 +0200 Subject: [PATCH] Fixed problems relating to Crafting Upgrade + Interface now supports Crafting Upgrade --- CHANGELOG.md | 3 + .../api/network/NetworkUtils.java | 21 +++++++ .../autocrafting/CraftingTaskScheduler.java | 58 ------------------- .../refinedstorage/tile/TileConstructor.java | 13 +---- .../refinedstorage/tile/TileExporter.java | 14 +---- .../refinedstorage/tile/TileInterface.java | 5 +- 6 files changed, 32 insertions(+), 82 deletions(-) delete mode 100755 src/main/java/refinedstorage/apiimpl/autocrafting/CraftingTaskScheduler.java diff --git a/CHANGELOG.md b/CHANGELOG.md index 692728613..ab9eb4a36 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,9 @@ - Implemented multithreaded autocrafting (raoulvdberge) - Processing patterns now hold their items back for pushing until all the required items are gathered from the system (raoulvdberge) - Fixed item and fluid storage stored count having incorrect values at times (raoulvdberge) +- Reworked Crafting Monitor GUI (raoulvdberge) +- Fixed problems relating to Crafting Upgrade (scheduling a task wrongly, blocking other tasks, etc) (raoulvdberge) +- Interface now supports Crafting Upgrade (raoulvdberge) ### 0.9.4 - Little fixes in German translation (ThexXTURBOXx) diff --git a/src/main/java/refinedstorage/api/network/NetworkUtils.java b/src/main/java/refinedstorage/api/network/NetworkUtils.java index 9c55ad938..24007eb08 100755 --- a/src/main/java/refinedstorage/api/network/NetworkUtils.java +++ b/src/main/java/refinedstorage/api/network/NetworkUtils.java @@ -7,6 +7,7 @@ import net.minecraftforge.fluids.FluidRegistry; import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fml.common.network.ByteBufUtils; import refinedstorage.api.autocrafting.ICraftingPattern; +import refinedstorage.api.autocrafting.task.ICraftingTask; import refinedstorage.api.storage.CompareUtils; /** @@ -41,6 +42,26 @@ public final class NetworkUtils { return stack.getFluid().hashCode() * (stack.tag != null ? stack.tag.hashCode() : 1); } + public static void scheduleCraftingTaskIfUnscheduled(INetworkMaster network, ItemStack stack, int toSchedule, int compare) { + int alreadyScheduled = 0; + + for (ICraftingTask task : network.getCraftingTasks()) { + for (ItemStack output : task.getPattern().getOutputs()) { + if (CompareUtils.compareStack(output, stack, compare)) { + alreadyScheduled++; + } + } + } + + for (int i = 0; i < toSchedule - alreadyScheduled; ++i) { + ICraftingPattern pattern = network.getPattern(stack, compare); + + if (pattern != null) { + network.addCraftingTask(network.createCraftingTask(pattern)); + } + } + } + public static void writeItemStack(ByteBuf buf, INetworkMaster network, ItemStack stack) { buf.writeInt(Item.getIdFromItem(stack.getItem())); buf.writeInt(stack.stackSize); diff --git a/src/main/java/refinedstorage/apiimpl/autocrafting/CraftingTaskScheduler.java b/src/main/java/refinedstorage/apiimpl/autocrafting/CraftingTaskScheduler.java deleted file mode 100755 index 108227882..000000000 --- a/src/main/java/refinedstorage/apiimpl/autocrafting/CraftingTaskScheduler.java +++ /dev/null @@ -1,58 +0,0 @@ -package refinedstorage.apiimpl.autocrafting; - -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; -import refinedstorage.api.autocrafting.ICraftingPattern; -import refinedstorage.api.network.INetworkMaster; -import refinedstorage.api.storage.CompareUtils; - -/** - * @TODO: Rework this! - */ -public class CraftingTaskScheduler { - private static final String NBT_SCHEDULED = "CraftingTaskScheduled"; - - private TileEntity tile; - private ItemStack scheduledItem; - - public CraftingTaskScheduler(TileEntity tile) { - this.tile = tile; - } - - public boolean canSchedule(int compare, ItemStack item) { - return scheduledItem == null || !CompareUtils.compareStack(scheduledItem, item, compare); - } - - public void schedule(INetworkMaster network, int compare, ItemStack item) { - ICraftingPattern pattern = network.getPattern(item, compare); - - if (pattern != null) { - scheduledItem = item; - - network.addCraftingTask(network.createCraftingTask(pattern)); - - tile.markDirty(); - } - } - - public void resetSchedule() { - scheduledItem = null; - - tile.markDirty(); - } - - public void write(NBTTagCompound tag) { - if (scheduledItem != null) { - tag.setTag(NBT_SCHEDULED, scheduledItem.serializeNBT()); - } else { - tag.removeTag(NBT_SCHEDULED); - } - } - - public void read(NBTTagCompound tag) { - if (tag.hasKey(NBT_SCHEDULED)) { - scheduledItem = ItemStack.loadItemStackFromNBT(tag.getCompoundTag(NBT_SCHEDULED)); - } - } -} diff --git a/src/main/java/refinedstorage/tile/TileConstructor.java b/src/main/java/refinedstorage/tile/TileConstructor.java index d66a2ff0a..8bbe6c04f 100755 --- a/src/main/java/refinedstorage/tile/TileConstructor.java +++ b/src/main/java/refinedstorage/tile/TileConstructor.java @@ -16,7 +16,7 @@ import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.items.CapabilityItemHandler; import net.minecraftforge.items.IItemHandler; import refinedstorage.RefinedStorage; -import refinedstorage.apiimpl.autocrafting.CraftingTaskScheduler; +import refinedstorage.api.network.NetworkUtils; import refinedstorage.container.slot.SlotSpecimen; import refinedstorage.inventory.ItemHandlerBasic; import refinedstorage.inventory.ItemHandlerFluid; @@ -52,8 +52,6 @@ public class TileConstructor extends TileMultipartNode implements IComparable, I private IBlockState block; - private CraftingTaskScheduler scheduler = new CraftingTaskScheduler(this); - public TileConstructor() { dataManager.addWatchedParameter(COMPARE); dataManager.addWatchedParameter(TYPE); @@ -79,7 +77,6 @@ public class TileConstructor extends TileMultipartNode implements IComparable, I ItemStack took = network.extractItem(itemFilters.getStackInSlot(0), 1, compare); if (took != null) { - scheduler.resetSchedule(); worldObj.setBlockState(front, block.getBlock().getStateFromMeta(took.getMetadata()), 1 | 2); // From ItemBlock.onItemUse SoundType blockSound = block.getBlock().getSoundType(); @@ -87,9 +84,7 @@ public class TileConstructor extends TileMultipartNode implements IComparable, I } else if (upgrades.hasUpgrade(ItemUpgrade.TYPE_CRAFTING)) { ItemStack craft = itemFilters.getStackInSlot(0); - if (scheduler.canSchedule(compare, craft)) { - scheduler.schedule(network, compare, craft); - } + NetworkUtils.scheduleCraftingTaskIfUnscheduled(network, craft, 1, compare); } } } else if (type == IType.FLUIDS) { @@ -147,8 +142,6 @@ public class TileConstructor extends TileMultipartNode implements IComparable, I readItems(itemFilters, 0, tag); readItems(upgrades, 1, tag); readItems(fluidFilters, 2, tag); - - scheduler.read(tag); } @Override @@ -162,8 +155,6 @@ public class TileConstructor extends TileMultipartNode implements IComparable, I writeItems(upgrades, 1, tag); writeItems(fluidFilters, 2, tag); - scheduler.write(tag); - return tag; } diff --git a/src/main/java/refinedstorage/tile/TileExporter.java b/src/main/java/refinedstorage/tile/TileExporter.java index 3e4079b6d..8432a56d5 100755 --- a/src/main/java/refinedstorage/tile/TileExporter.java +++ b/src/main/java/refinedstorage/tile/TileExporter.java @@ -12,7 +12,7 @@ import net.minecraftforge.items.CapabilityItemHandler; import net.minecraftforge.items.IItemHandler; import net.minecraftforge.items.ItemHandlerHelper; import refinedstorage.RefinedStorage; -import refinedstorage.apiimpl.autocrafting.CraftingTaskScheduler; +import refinedstorage.api.network.NetworkUtils; import refinedstorage.inventory.ItemHandlerBasic; import refinedstorage.inventory.ItemHandlerFluid; import refinedstorage.inventory.ItemHandlerUpgrade; @@ -36,8 +36,6 @@ public class TileExporter extends TileMultipartNode implements IComparable, ITyp private int compare = 0; private int type = IType.ITEMS; - private CraftingTaskScheduler scheduler = new CraftingTaskScheduler(this); - public TileExporter() { dataManager.addWatchedParameter(COMPARE); dataManager.addWatchedParameter(TYPE); @@ -69,17 +67,13 @@ public class TileExporter extends TileMultipartNode implements IComparable, ITyp ItemStack took = network.extractItem(slot, size, compare); if (took != null) { - scheduler.resetSchedule(); - ItemStack remainder = ItemHandlerHelper.insertItem(handler, took, false); if (remainder != null) { network.insertItem(remainder, remainder.stackSize, false); } } else if (upgrades.hasUpgrade(ItemUpgrade.TYPE_CRAFTING)) { - if (scheduler.canSchedule(compare, slot)) { - scheduler.schedule(network, compare, slot); - } + NetworkUtils.scheduleCraftingTaskIfUnscheduled(network, slot, 1, compare); } } } @@ -133,8 +127,6 @@ public class TileExporter extends TileMultipartNode implements IComparable, ITyp readItems(itemFilters, 0, tag); readItems(upgrades, 1, tag); readItems(fluidFilters, 2, tag); - - scheduler.read(tag); } @Override @@ -148,8 +140,6 @@ public class TileExporter extends TileMultipartNode implements IComparable, ITyp writeItems(upgrades, 1, tag); writeItems(fluidFilters, 2, tag); - scheduler.write(tag); - return tag; } diff --git a/src/main/java/refinedstorage/tile/TileInterface.java b/src/main/java/refinedstorage/tile/TileInterface.java index 438ab6d75..41a282f02 100755 --- a/src/main/java/refinedstorage/tile/TileInterface.java +++ b/src/main/java/refinedstorage/tile/TileInterface.java @@ -8,6 +8,7 @@ import net.minecraftforge.items.CapabilityItemHandler; import net.minecraftforge.items.IItemHandler; import net.minecraftforge.items.wrapper.CombinedInvWrapper; import refinedstorage.RefinedStorage; +import refinedstorage.api.network.NetworkUtils; import refinedstorage.inventory.ItemHandlerBasic; import refinedstorage.inventory.ItemHandlerUpgrade; import refinedstorage.item.ItemUpgrade; @@ -22,7 +23,7 @@ public class TileInterface extends TileNode implements IComparable { private ItemHandlerBasic importItems = new ItemHandlerBasic(9, this); private ItemHandlerBasic exportSpecimenItems = new ItemHandlerBasic(9, this); private ItemHandlerBasic exportItems = new ItemHandlerBasic(9, this); - private ItemHandlerUpgrade upgrades = new ItemHandlerUpgrade(4, this, ItemUpgrade.TYPE_SPEED, ItemUpgrade.TYPE_STACK); + private ItemHandlerUpgrade upgrades = new ItemHandlerUpgrade(4, this, ItemUpgrade.TYPE_SPEED, ItemUpgrade.TYPE_STACK, ItemUpgrade.TYPE_CRAFTING); private int compare = 0; @@ -79,6 +80,8 @@ public class TileInterface extends TileNode implements IComparable { } else { exportItems.getStackInSlot(i).stackSize += result.stackSize; } + } else { + NetworkUtils.scheduleCraftingTaskIfUnscheduled(network, wanted, delta, compare); } } else if (delta < 0) { ItemStack remainder = network.insertItem(got, Math.abs(delta), false);