From ce68fd6d72e1205acded5201073ed0b486a18d49 Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Wed, 25 May 2016 02:18:34 +0200 Subject: [PATCH] Crafting improvements --- CHANGELOG.md | 4 +++ .../autocrafting/TileCraftingMonitor.java | 29 ++++++++++--------- .../autocrafting/task/BasicCraftingTask.java | 2 +- .../task/CraftingTaskScheduler.java | 2 +- .../task/ProcessingCraftingTask.java | 2 +- .../tile/controller/StorageHandler.java | 2 +- .../tile/controller/TileController.java | 18 ++++++++++-- 7 files changed, 39 insertions(+), 20 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 23c632b48..4cd23949d 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ # Refined Storage Changelog +### 0.7.3 +**Features** +- Crafting tasks are now sorted from new to old in the Crafting Monitor + ### 0.7.2 **Bugfixes** - Fixed Importer getting stuck on slot diff --git a/src/main/java/refinedstorage/tile/autocrafting/TileCraftingMonitor.java b/src/main/java/refinedstorage/tile/autocrafting/TileCraftingMonitor.java index d04653900..917533cb7 100755 --- a/src/main/java/refinedstorage/tile/autocrafting/TileCraftingMonitor.java +++ b/src/main/java/refinedstorage/tile/autocrafting/TileCraftingMonitor.java @@ -9,15 +9,10 @@ import refinedstorage.tile.TileMachine; import refinedstorage.tile.autocrafting.task.ICraftingTask; import java.util.ArrayList; +import java.util.Collections; import java.util.List; public class TileCraftingMonitor extends TileMachine { - public class ClientSideCraftingTask { - public ItemStack output; - public int id; - public String info; - } - private List tasks = new ArrayList(); @Override @@ -64,16 +59,12 @@ public class TileCraftingMonitor extends TileMachine { int outputs = buf.readInt(); for (int j = 0; j < outputs; ++j) { - ClientSideCraftingTask task = new ClientSideCraftingTask(); - - task.info = info; - task.output = ByteBufUtils.readItemStack(buf); - task.id = i; - - newTasks.add(task); + newTasks.add(new ClientSideCraftingTask(ByteBufUtils.readItemStack(buf), i, info)); } } + Collections.reverse(newTasks); + tasks = newTasks; } @@ -85,4 +76,16 @@ public class TileCraftingMonitor extends TileMachine { public Class getContainer() { return ContainerCraftingMonitor.class; } + + public class ClientSideCraftingTask { + public ItemStack output; + public int id; + public String info; + + public ClientSideCraftingTask(ItemStack output, int id, String info) { + this.output = output; + this.id = id; + this.info = info; + } + } } diff --git a/src/main/java/refinedstorage/tile/autocrafting/task/BasicCraftingTask.java b/src/main/java/refinedstorage/tile/autocrafting/task/BasicCraftingTask.java index e4352ccb3..ce29bbb8e 100755 --- a/src/main/java/refinedstorage/tile/autocrafting/task/BasicCraftingTask.java +++ b/src/main/java/refinedstorage/tile/autocrafting/task/BasicCraftingTask.java @@ -71,7 +71,7 @@ public class BasicCraftingTask implements ICraftingTask { CraftingPattern pattern = controller.getPattern(input); if (pattern != null) { - controller.addCraftingTask(pattern); + controller.addCraftingTask(controller.createCraftingTask(pattern)); childTasks[i] = true; } diff --git a/src/main/java/refinedstorage/tile/autocrafting/task/CraftingTaskScheduler.java b/src/main/java/refinedstorage/tile/autocrafting/task/CraftingTaskScheduler.java index 1fb346249..a2d16bc12 100755 --- a/src/main/java/refinedstorage/tile/autocrafting/task/CraftingTaskScheduler.java +++ b/src/main/java/refinedstorage/tile/autocrafting/task/CraftingTaskScheduler.java @@ -21,7 +21,7 @@ public class CraftingTaskScheduler { if (pattern != null) { scheduledItem = item; - controller.addCraftingTask(pattern); + controller.addCraftingTask(controller.createCraftingTask(pattern)); } } diff --git a/src/main/java/refinedstorage/tile/autocrafting/task/ProcessingCraftingTask.java b/src/main/java/refinedstorage/tile/autocrafting/task/ProcessingCraftingTask.java index 836c2dc7a..03bdc53a2 100755 --- a/src/main/java/refinedstorage/tile/autocrafting/task/ProcessingCraftingTask.java +++ b/src/main/java/refinedstorage/tile/autocrafting/task/ProcessingCraftingTask.java @@ -66,7 +66,7 @@ public class ProcessingCraftingTask implements ICraftingTask { if (pattern != null) { childTasks[i] = true; - controller.addCraftingTask(pattern); + controller.addCraftingTask(controller.createCraftingTask(pattern)); break; } diff --git a/src/main/java/refinedstorage/tile/controller/StorageHandler.java b/src/main/java/refinedstorage/tile/controller/StorageHandler.java index cc02f3b3f..b1f235c7b 100755 --- a/src/main/java/refinedstorage/tile/controller/StorageHandler.java +++ b/src/main/java/refinedstorage/tile/controller/StorageHandler.java @@ -117,7 +117,7 @@ public class StorageHandler { } while (quantity > 0) { - controller.addCraftingTask(pattern); + controller.addCraftingTaskAsLast(controller.createCraftingTask(pattern)); quantity -= quantityPerRequest; } diff --git a/src/main/java/refinedstorage/tile/controller/TileController.java b/src/main/java/refinedstorage/tile/controller/TileController.java index 9adaa0471..d05ad7bc8 100755 --- a/src/main/java/refinedstorage/tile/controller/TileController.java +++ b/src/main/java/refinedstorage/tile/controller/TileController.java @@ -63,6 +63,7 @@ public class TileController extends TileBase implements IEnergyReceiver, ISynchr private List patterns = new ArrayList(); private Stack craftingTasks = new Stack(); + private List craftingTasksToAddAsLast = new ArrayList(); private List craftingTasksToAdd = new ArrayList(); private List craftingTasksToCancel = new ArrayList(); @@ -114,6 +115,11 @@ public class TileController extends TileBase implements IEnergyReceiver, ISynchr } craftingTasksToAdd.clear(); + for (ICraftingTask task : craftingTasksToAddAsLast) { + craftingTasks.add(0, task); + } + craftingTasksToAddAsLast.clear(); + if (!craftingTasks.empty()) { ICraftingTask top = craftingTasks.peek(); @@ -264,11 +270,17 @@ public class TileController extends TileBase implements IEnergyReceiver, ISynchr markDirty(); } - public void addCraftingTask(CraftingPattern pattern) { + public void addCraftingTaskAsLast(ICraftingTask task) { + craftingTasksToAddAsLast.add(task); + + markDirty(); + } + + public ICraftingTask createCraftingTask(CraftingPattern pattern) { if (pattern.isProcessing()) { - addCraftingTask(new ProcessingCraftingTask(pattern)); + return new ProcessingCraftingTask(pattern); } else { - addCraftingTask(new BasicCraftingTask(pattern)); + return new BasicCraftingTask(pattern); } }