From 423696d89a46f679df26f4c5643b9bfd1c1f02b7 Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Sat, 8 Oct 2016 00:11:19 +0200 Subject: [PATCH] Show IProcessable items in crafting monitor too --- .../api/autocrafting/task/IProcessable.java | 2 + .../CraftingMonitorElementItemRender.java | 40 +++++++++++++-- .../CraftingMonitorElementRoot.java | 46 ----------------- .../CraftingMonitorElementToTake.java | 49 ------------------- .../autocrafting/task/CraftingTaskNormal.java | 49 ++++++++++++++----- .../autocrafting/task/Processable.java | 5 ++ .../refinedstorage/proxy/CommonProxy.java | 6 +-- 7 files changed, 82 insertions(+), 115 deletions(-) delete mode 100755 src/main/java/refinedstorage/apiimpl/autocrafting/craftingmonitor/CraftingMonitorElementRoot.java delete mode 100755 src/main/java/refinedstorage/apiimpl/autocrafting/craftingmonitor/CraftingMonitorElementToTake.java diff --git a/src/main/java/refinedstorage/api/autocrafting/task/IProcessable.java b/src/main/java/refinedstorage/api/autocrafting/task/IProcessable.java index 656d31d1d..a17a95d65 100755 --- a/src/main/java/refinedstorage/api/autocrafting/task/IProcessable.java +++ b/src/main/java/refinedstorage/api/autocrafting/task/IProcessable.java @@ -27,6 +27,8 @@ public interface IProcessable { */ boolean hasReceivedOutputs(); + boolean hasReceivedOutput(int i); + /** * @param stack the stack that was inserted in the storage system * @return whether this item belonged to the processable item diff --git a/src/main/java/refinedstorage/apiimpl/autocrafting/craftingmonitor/CraftingMonitorElementItemRender.java b/src/main/java/refinedstorage/apiimpl/autocrafting/craftingmonitor/CraftingMonitorElementItemRender.java index f51b65a8b..8e6c84b43 100755 --- a/src/main/java/refinedstorage/apiimpl/autocrafting/craftingmonitor/CraftingMonitorElementItemRender.java +++ b/src/main/java/refinedstorage/apiimpl/autocrafting/craftingmonitor/CraftingMonitorElementItemRender.java @@ -1,26 +1,56 @@ package refinedstorage.apiimpl.autocrafting.craftingmonitor; +import io.netty.buffer.ByteBuf; import net.minecraft.client.renderer.GlStateManager; import net.minecraft.item.ItemStack; +import net.minecraftforge.fml.common.network.ByteBufUtils; import refinedstorage.api.autocrafting.craftingmonitor.ICraftingMonitorElement; import refinedstorage.gui.GuiBase; -public abstract class CraftingMonitorElementItemRender implements ICraftingMonitorElement { +public class CraftingMonitorElementItemRender implements ICraftingMonitorElement { + public static final String ID = "item_render"; + + private int taskId; + private ItemStack stack; + private int quantity; + private int offset; + + public CraftingMonitorElementItemRender(int taskId, ItemStack stack, int quantity, int offset) { + this.taskId = taskId; + this.stack = stack; + this.quantity = quantity; + this.offset = offset; + } + @Override public void draw(GuiBase gui, int x, int y) { - gui.drawItem(x + 2, y + 1, getItem()); + gui.drawItem(x + 2 + offset, y + 1, stack); float scale = 0.5f; GlStateManager.pushMatrix(); GlStateManager.scale(scale, scale, 1); - gui.drawString(gui.calculateOffsetOnScale(x + 21, scale), gui.calculateOffsetOnScale(y + 7, scale), getQuantity() + " " + getItem().getDisplayName()); + gui.drawString(gui.calculateOffsetOnScale(x + 21 + offset, scale), gui.calculateOffsetOnScale(y + 7, scale), quantity + " " + stack.getDisplayName()); GlStateManager.popMatrix(); } - protected abstract ItemStack getItem(); + @Override + public int getTaskId() { + return taskId; + } - protected abstract int getQuantity(); + @Override + public String getId() { + return ID; + } + + @Override + public void write(ByteBuf buf) { + buf.writeInt(taskId); + ByteBufUtils.writeItemStack(buf, stack); + buf.writeInt(quantity); + buf.writeInt(offset); + } } diff --git a/src/main/java/refinedstorage/apiimpl/autocrafting/craftingmonitor/CraftingMonitorElementRoot.java b/src/main/java/refinedstorage/apiimpl/autocrafting/craftingmonitor/CraftingMonitorElementRoot.java deleted file mode 100755 index 95beed9b8..000000000 --- a/src/main/java/refinedstorage/apiimpl/autocrafting/craftingmonitor/CraftingMonitorElementRoot.java +++ /dev/null @@ -1,46 +0,0 @@ -package refinedstorage.apiimpl.autocrafting.craftingmonitor; - -import io.netty.buffer.ByteBuf; -import net.minecraft.item.ItemStack; -import net.minecraftforge.fml.common.network.ByteBufUtils; - -public class CraftingMonitorElementRoot extends CraftingMonitorElementItemRender { - public static final String ID = "root"; - - private int id; - private ItemStack output; - private int quantity; - - public CraftingMonitorElementRoot(int id, ItemStack output, int quantity) { - this.id = id; - this.output = output; - this.quantity = quantity; - } - - @Override - public int getTaskId() { - return id; - } - - @Override - public String getId() { - return ID; - } - - @Override - public void write(ByteBuf buf) { - buf.writeInt(id); - ByteBufUtils.writeItemStack(buf, output); - buf.writeInt(quantity); - } - - @Override - protected ItemStack getItem() { - return output; - } - - @Override - protected int getQuantity() { - return quantity; - } -} diff --git a/src/main/java/refinedstorage/apiimpl/autocrafting/craftingmonitor/CraftingMonitorElementToTake.java b/src/main/java/refinedstorage/apiimpl/autocrafting/craftingmonitor/CraftingMonitorElementToTake.java deleted file mode 100755 index 6d2ac9e53..000000000 --- a/src/main/java/refinedstorage/apiimpl/autocrafting/craftingmonitor/CraftingMonitorElementToTake.java +++ /dev/null @@ -1,49 +0,0 @@ -package refinedstorage.apiimpl.autocrafting.craftingmonitor; - -import io.netty.buffer.ByteBuf; -import net.minecraft.item.ItemStack; -import net.minecraftforge.fml.common.network.ByteBufUtils; -import refinedstorage.gui.GuiBase; - -public class CraftingMonitorElementToTake extends CraftingMonitorElementItemRender { - public static final String ID = "to_take"; - - private ItemStack toTake; - private int remaining; - - public CraftingMonitorElementToTake(ItemStack toTake, int remaining) { - this.toTake = toTake; - this.remaining = remaining; - } - - @Override - public void draw(GuiBase gui, int x, int y) { - super.draw(gui, x + 32, y); - } - - @Override - public int getTaskId() { - return -1; - } - - @Override - public String getId() { - return ID; - } - - @Override - public void write(ByteBuf buf) { - ByteBufUtils.writeItemStack(buf, toTake); - buf.writeInt(remaining); - } - - @Override - protected ItemStack getItem() { - return toTake; - } - - @Override - protected int getQuantity() { - return remaining; - } -} diff --git a/src/main/java/refinedstorage/apiimpl/autocrafting/task/CraftingTaskNormal.java b/src/main/java/refinedstorage/apiimpl/autocrafting/task/CraftingTaskNormal.java index 12ceaa83e..f51ca22db 100755 --- a/src/main/java/refinedstorage/apiimpl/autocrafting/task/CraftingTaskNormal.java +++ b/src/main/java/refinedstorage/apiimpl/autocrafting/task/CraftingTaskNormal.java @@ -10,9 +10,8 @@ import refinedstorage.api.autocrafting.task.ICraftingTask; import refinedstorage.api.autocrafting.task.IProcessable; import refinedstorage.api.network.INetworkMaster; import refinedstorage.api.util.IItemStackList; -import refinedstorage.apiimpl.autocrafting.craftingmonitor.CraftingMonitorElementRoot; +import refinedstorage.apiimpl.autocrafting.craftingmonitor.CraftingMonitorElementItemRender; import refinedstorage.apiimpl.autocrafting.craftingmonitor.CraftingMonitorElementText; -import refinedstorage.apiimpl.autocrafting.craftingmonitor.CraftingMonitorElementToTake; import java.util.ArrayList; import java.util.List; @@ -123,7 +122,7 @@ public class CraftingTaskNormal implements ICraftingTask { break; } - if (toTake.isEmpty() && missing.isEmpty() && toProcess.stream().allMatch(IProcessable::hasReceivedOutputs)) { + if (toTake.isEmpty() && missing.isEmpty() && hasProcessedItems()) { for (ItemStack output : pattern.getOutputs()) { // @TODO: Handle remainder network.insertItem(output, output.stackSize, false); @@ -154,18 +153,43 @@ public class CraftingTaskNormal implements ICraftingTask { public List getCraftingMonitorElements() { List elements = new ArrayList<>(); - elements.add(new CraftingMonitorElementRoot( + elements.add(new CraftingMonitorElementItemRender( network.getCraftingTasks().indexOf(this), pattern.getOutputs().get(0), - quantity + quantity, + 0 )); - elements.add(new CraftingMonitorElementText("gui.refinedstorage:crafting_monitor.items_taking", 16)); + if (!toTake.isEmpty()) { + elements.add(new CraftingMonitorElementText("gui.refinedstorage:crafting_monitor.items_taking", 16)); - elements.addAll(toTake.getStacks().stream() - .map(stack -> new CraftingMonitorElementToTake(stack, stack.stackSize)) - .collect(Collectors.toList()) - ); + elements.addAll(toTake.getStacks().stream() + .map(stack -> new CraftingMonitorElementItemRender( + -1, + stack, + stack.stackSize, + 32 + )) + .collect(Collectors.toList()) + ); + } + + if (!hasProcessedItems()) { + elements.add(new CraftingMonitorElementText("gui.refinedstorage:crafting_monitor.items_processing", 16)); + + for (IProcessable processable : toProcess) { + for (int i = 0; i < processable.getPattern().getOutputs().size(); ++i) { + if (!processable.hasReceivedOutput(i)) { + elements.add(new CraftingMonitorElementItemRender( + -1, + processable.getPattern().getOutputs().get(i), + processable.getPattern().getOutputs().get(i).stackSize, + 32 + )); + } + } + } + } return elements; } @@ -175,12 +199,15 @@ public class CraftingTaskNormal implements ICraftingTask { return pattern; } - @Override public List getToProcess() { return toProcess; } + private boolean hasProcessedItems() { + return toProcess.stream().allMatch(IProcessable::hasReceivedOutputs); + } + private void addExtras(ICraftingPattern pattern) { pattern.getOutputs().stream() .filter(o -> o.stackSize > 1) diff --git a/src/main/java/refinedstorage/apiimpl/autocrafting/task/Processable.java b/src/main/java/refinedstorage/apiimpl/autocrafting/task/Processable.java index c745a5288..d0d579832 100755 --- a/src/main/java/refinedstorage/apiimpl/autocrafting/task/Processable.java +++ b/src/main/java/refinedstorage/apiimpl/autocrafting/task/Processable.java @@ -45,6 +45,11 @@ public class Processable implements IProcessable { return true; } + @Override + public boolean hasReceivedOutput(int i) { + return satisfied[i]; + } + @Override public boolean onReceiveOutput(ItemStack stack) { for (int i = 0; i < pattern.getOutputs().size(); ++i) { diff --git a/src/main/java/refinedstorage/proxy/CommonProxy.java b/src/main/java/refinedstorage/proxy/CommonProxy.java index c2f2447ea..8fbbebbac 100755 --- a/src/main/java/refinedstorage/proxy/CommonProxy.java +++ b/src/main/java/refinedstorage/proxy/CommonProxy.java @@ -19,9 +19,8 @@ import refinedstorage.RS; import refinedstorage.RSBlocks; import refinedstorage.RSItems; import refinedstorage.api.RSAPI; -import refinedstorage.apiimpl.autocrafting.craftingmonitor.CraftingMonitorElementRoot; +import refinedstorage.apiimpl.autocrafting.craftingmonitor.CraftingMonitorElementItemRender; import refinedstorage.apiimpl.autocrafting.craftingmonitor.CraftingMonitorElementText; -import refinedstorage.apiimpl.autocrafting.craftingmonitor.CraftingMonitorElementToTake; import refinedstorage.apiimpl.autocrafting.registry.CraftingTaskFactoryNormal; import refinedstorage.apiimpl.solderer.*; import refinedstorage.apiimpl.storage.fluid.FluidStorageNBT; @@ -50,8 +49,7 @@ public class CommonProxy { RSAPI.instance().getCraftingTaskRegistry().addFactory(CraftingTaskFactoryNormal.ID, new CraftingTaskFactoryNormal()); - RSAPI.instance().getCraftingMonitorElementRegistry().add(CraftingMonitorElementRoot.ID, buf -> new CraftingMonitorElementRoot(buf.readInt(), ByteBufUtils.readItemStack(buf), buf.readInt())); - RSAPI.instance().getCraftingMonitorElementRegistry().add(CraftingMonitorElementToTake.ID, buf -> new CraftingMonitorElementToTake(ByteBufUtils.readItemStack(buf), buf.readInt())); + RSAPI.instance().getCraftingMonitorElementRegistry().add(CraftingMonitorElementItemRender.ID, buf -> new CraftingMonitorElementItemRender(buf.readInt(), ByteBufUtils.readItemStack(buf), buf.readInt(), buf.readInt())); RSAPI.instance().getCraftingMonitorElementRegistry().add(CraftingMonitorElementText.ID, buf -> new CraftingMonitorElementText(ByteBufUtils.readUTF8String(buf), buf.readInt())); int id = 0;