From ca8466870c4977862ee932559538ca33cda1c7d5 Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Thu, 5 May 2016 16:54:06 +0200 Subject: [PATCH] Add information to crafting monitor about crafting task --- src/main/java/refinedstorage/gui/GuiBase.java | 6 +- .../gui/GuiCraftingMonitor.java | 24 +++++++- .../autocrafting/TileCraftingMonitor.java | 15 ++++- .../autocrafting/task/BasicCraftingTask.java | 44 ++++++++++++++ .../tile/autocrafting/task/ICraftingTask.java | 2 + .../task/ProcessingCraftingTask.java | 59 +++++++++++++++++++ .../assets/refinedstorage/lang/en_US.lang | 5 ++ .../assets/refinedstorage/lang/nl_NL.lang | 5 ++ 8 files changed, 156 insertions(+), 4 deletions(-) diff --git a/src/main/java/refinedstorage/gui/GuiBase.java b/src/main/java/refinedstorage/gui/GuiBase.java index 3f05baba2..02dbc5de3 100755 --- a/src/main/java/refinedstorage/gui/GuiBase.java +++ b/src/main/java/refinedstorage/gui/GuiBase.java @@ -204,8 +204,12 @@ public abstract class GuiBase extends GuiContainer { } public void drawTooltip(int x, int y, String message) { + drawTooltip(x, y, Arrays.asList(message.split("\n"))); + } + + public void drawTooltip(int x, int y, List lines) { GL11.glDisable(GL11.GL_LIGHTING); - drawHoveringText(Arrays.asList(message.split("\n")), x, y); + drawHoveringText(lines, x, y); GL11.glEnable(GL11.GL_LIGHTING); } diff --git a/src/main/java/refinedstorage/gui/GuiCraftingMonitor.java b/src/main/java/refinedstorage/gui/GuiCraftingMonitor.java index e802fa4c2..a02a6f442 100755 --- a/src/main/java/refinedstorage/gui/GuiCraftingMonitor.java +++ b/src/main/java/refinedstorage/gui/GuiCraftingMonitor.java @@ -6,6 +6,7 @@ import net.minecraft.item.ItemStack; import refinedstorage.container.ContainerCraftingMonitor; import refinedstorage.gui.sidebutton.SideButtonRedstoneMode; import refinedstorage.tile.autocrafting.TileCraftingMonitor; +import scala.actors.threadpool.Arrays; import java.util.List; @@ -64,8 +65,10 @@ public class GuiCraftingMonitor extends GuiBase { List tasks = craftingMonitor.getTasks(); + List infoLines = null; + for (int i = 0; i < 6; ++i) { - if (slot < tasks.size()) { + if (slot < tasks.size() && slot < craftingMonitor.getInfo().length) { ItemStack task = tasks.get(slot); drawItem(x, y + 5, task); @@ -77,6 +80,21 @@ public class GuiCraftingMonitor extends GuiBase { drawString(calculateOffsetOnScale(x + 1, scale), calculateOffsetOnScale(y - 3, scale), task.getDisplayName()); GlStateManager.popMatrix(); + + if (inBounds(x, y + 5, 16, 16, mouseX, mouseY)) { + infoLines = Arrays.asList(craftingMonitor.getInfo()[slot].split("\n")); + + for (int j = 0; j < infoLines.size(); ++j) { + String line = infoLines.get(j); + + infoLines.set(j, line + .replace("{missing_items}", t("gui.refinedstorage:crafting_monitor.missing_items")) + .replace("{items_crafting}", t("gui.refinedstorage:crafting_monitor.items_crafting")) + .replace("{items_processing}", t("gui.refinedstorage:crafting_monitor.items_processing")) + .replace("{missing_machine}", t("gui.refinedstorage:crafting_monitor.missing_machine")) + .replace("{none}", t("misc.refinedstorage:none"))); + } + } } if (i == 1 || i == 3) { @@ -88,6 +106,10 @@ public class GuiCraftingMonitor extends GuiBase { slot++; } + + if (infoLines != null) { + drawTooltip(mouseX, mouseY, infoLines); + } } public int getOffset() { diff --git a/src/main/java/refinedstorage/tile/autocrafting/TileCraftingMonitor.java b/src/main/java/refinedstorage/tile/autocrafting/TileCraftingMonitor.java index ef347676b..34d0ea6cd 100755 --- a/src/main/java/refinedstorage/tile/autocrafting/TileCraftingMonitor.java +++ b/src/main/java/refinedstorage/tile/autocrafting/TileCraftingMonitor.java @@ -13,6 +13,7 @@ import java.util.List; public class TileCraftingMonitor extends TileMachine { private List tasks = new ArrayList(); + private String[] info = new String[0]; @Override public int getEnergyUsage() { @@ -31,6 +32,8 @@ public class TileCraftingMonitor extends TileMachine { buf.writeInt(controller.getCraftingTasks().size()); for (ICraftingTask task : controller.getCraftingTasks()) { + ByteBufUtils.writeUTF8String(buf, task.getInfo()); + buf.writeInt(task.getPattern().getOutputs().length); for (ItemStack output : task.getPattern().getOutputs()) { @@ -46,11 +49,14 @@ public class TileCraftingMonitor extends TileMachine { public void receiveContainerData(ByteBuf buf) { super.receiveContainerData(buf); - List newTasks = new ArrayList(); - int size = buf.readInt(); + List newTasks = new ArrayList(); + String[] newInfo = new String[size]; + for (int i = 0; i < size; ++i) { + newInfo[i] = ByteBufUtils.readUTF8String(buf); + int outputSize = buf.readInt(); for (int j = 0; j < outputSize; ++j) { @@ -59,12 +65,17 @@ public class TileCraftingMonitor extends TileMachine { } tasks = newTasks; + info = newInfo; } public List getTasks() { return tasks; } + public String[] getInfo() { + return info; + } + @Override public Class getContainer() { return ContainerCraftingMonitor.class; diff --git a/src/main/java/refinedstorage/tile/autocrafting/task/BasicCraftingTask.java b/src/main/java/refinedstorage/tile/autocrafting/task/BasicCraftingTask.java index 4eadb3c9e..77c2ccaa5 100755 --- a/src/main/java/refinedstorage/tile/autocrafting/task/BasicCraftingTask.java +++ b/src/main/java/refinedstorage/tile/autocrafting/task/BasicCraftingTask.java @@ -1,6 +1,7 @@ package refinedstorage.tile.autocrafting.task; import net.minecraft.item.ItemStack; +import net.minecraft.util.text.TextFormatting; import refinedstorage.tile.TileController; import refinedstorage.tile.autocrafting.CraftingPattern; @@ -57,4 +58,47 @@ public class BasicCraftingTask implements ICraftingTask { controller.push(output); } } + + @Override + public String getInfo() { + StringBuilder builder = new StringBuilder(); + + builder.append(TextFormatting.YELLOW).append("{missing_items}").append(TextFormatting.RESET).append("\n"); + + int missingItems = 0; + + for (int i = 0; i < pattern.getInputs().length; ++i) { + ItemStack input = pattern.getInputs()[i]; + + if (!satisfied[i] && !childTasks[i]) { + builder.append("- ").append(input.getUnlocalizedName()).append("\n"); + + missingItems++; + } + } + + if (missingItems == 0) { + builder.append(TextFormatting.GRAY).append(TextFormatting.ITALIC).append("{none}").append(TextFormatting.RESET).append("\n"); + } + + builder.append(TextFormatting.YELLOW).append("{items_crafting}").append(TextFormatting.RESET).append("\n"); + + int itemsCrafting = 0; + + for (int i = 0; i < pattern.getInputs().length; ++i) { + ItemStack input = pattern.getInputs()[i]; + + if (childTasks[i]) { + builder.append("- ").append(input.getDisplayName()).append("\n"); + + itemsCrafting++; + } + } + + if (itemsCrafting == 0) { + builder.append(TextFormatting.GRAY).append(TextFormatting.ITALIC).append("{none}").append(TextFormatting.RESET).append("\n"); + } + + return builder.toString(); + } } diff --git a/src/main/java/refinedstorage/tile/autocrafting/task/ICraftingTask.java b/src/main/java/refinedstorage/tile/autocrafting/task/ICraftingTask.java index 5b63dd0aa..fc9a4140c 100755 --- a/src/main/java/refinedstorage/tile/autocrafting/task/ICraftingTask.java +++ b/src/main/java/refinedstorage/tile/autocrafting/task/ICraftingTask.java @@ -9,4 +9,6 @@ public interface ICraftingTask { boolean update(TileController controller); void onDone(TileController controller); + + String getInfo(); } diff --git a/src/main/java/refinedstorage/tile/autocrafting/task/ProcessingCraftingTask.java b/src/main/java/refinedstorage/tile/autocrafting/task/ProcessingCraftingTask.java index b3053f0d5..cad398c67 100755 --- a/src/main/java/refinedstorage/tile/autocrafting/task/ProcessingCraftingTask.java +++ b/src/main/java/refinedstorage/tile/autocrafting/task/ProcessingCraftingTask.java @@ -4,6 +4,7 @@ import net.minecraft.inventory.IInventory; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; import net.minecraft.tileentity.TileEntityHopper; +import net.minecraft.util.text.TextFormatting; import refinedstorage.tile.TileController; import refinedstorage.tile.autocrafting.CraftingPattern; import refinedstorage.tile.autocrafting.TileCrafter; @@ -12,11 +13,14 @@ import refinedstorage.util.InventoryUtils; public class ProcessingCraftingTask implements ICraftingTask { private CraftingPattern pattern; private boolean inserted[]; + private boolean missing[]; private boolean satisfied[]; + private boolean missingMachine; public ProcessingCraftingTask(CraftingPattern pattern) { this.pattern = pattern; this.inserted = new boolean[pattern.getInputs().length]; + this.missing = new boolean[pattern.getInputs().length]; this.satisfied = new boolean[pattern.getOutputs().length]; } @@ -31,12 +35,16 @@ public class ProcessingCraftingTask implements ICraftingTask { TileEntity crafterFacing = crafter.getWorld().getTileEntity(crafter.getPos().offset(crafter.getDirection())); if (crafterFacing instanceof IInventory) { + missingMachine = false; + for (int i = 0; i < inserted.length; ++i) { if (!inserted[i]) { ItemStack input = pattern.getInputs()[i]; ItemStack took = controller.take(input); if (took != null) { + missing[i] = false; + ItemStack remaining = TileEntityHopper.putStackInInventoryAllSlots((IInventory) crafterFacing, took, crafter.getDirection().getOpposite()); if (remaining == null) { @@ -44,9 +52,13 @@ public class ProcessingCraftingTask implements ICraftingTask { } else { controller.push(input); } + } else { + missing[i] = true; } } } + } else { + missingMachine = true; } for (int i = 0; i < satisfied.length; ++i) { @@ -73,4 +85,51 @@ public class ProcessingCraftingTask implements ICraftingTask { public void onDone(TileController controller) { // NO OP } + + @Override + public String getInfo() { + StringBuilder builder = new StringBuilder(); + + if (missingMachine) { + builder.append(TextFormatting.RED).append("{missing_machine}").append(TextFormatting.RESET).append("\n"); + } + + builder.append(TextFormatting.YELLOW).append("{missing_items}").append(TextFormatting.RESET).append("\n"); + + int missingItems = 0; + + for (int i = 0; i < pattern.getInputs().length; ++i) { + ItemStack input = pattern.getInputs()[i]; + + if (missing[i]) { + builder.append("- ").append(input.getDisplayName()).append("\n"); + + missingItems++; + } + } + + if (missingItems == 0) { + builder.append(TextFormatting.GRAY).append(TextFormatting.ITALIC).append("{none}").append(TextFormatting.RESET).append("\n"); + } + + builder.append(TextFormatting.YELLOW).append("{items_processing}").append(TextFormatting.RESET).append("\n"); + + int itemsProcessing = 0; + + for (int i = 0; i < pattern.getInputs().length; ++i) { + ItemStack input = pattern.getInputs()[i]; + + if (inserted[i] && !satisfied[i]) { + builder.append("- ").append(input.getDisplayName()).append("\n"); + + itemsProcessing++; + } + } + + if (itemsProcessing == 0) { + builder.append(TextFormatting.GRAY).append(TextFormatting.ITALIC).append("{none}").append(TextFormatting.RESET).append("\n"); + } + + return builder.toString(); + } } diff --git a/src/main/resources/assets/refinedstorage/lang/en_US.lang b/src/main/resources/assets/refinedstorage/lang/en_US.lang index 6adefe62e..9e66c289d 100755 --- a/src/main/resources/assets/refinedstorage/lang/en_US.lang +++ b/src/main/resources/assets/refinedstorage/lang/en_US.lang @@ -21,6 +21,10 @@ gui.refinedstorage:relay=Relay gui.refinedstorage:interface.import=Interface Import gui.refinedstorage:interface.export=Interface Export gui.refinedstorage:crafting_monitor=Crafting Monitor +gui.refinedstorage:crafting_monitor.missing_items=Missing items: +gui.refinedstorage:crafting_monitor.items_crafting=Items crafting: +gui.refinedstorage:crafting_monitor.items_processing=Items processing: +gui.refinedstorage:crafting_monitor.missing_machine=Missing machine! gui.refinedstorage:wireless_transmitter=Wireless Transmitter gui.refinedstorage:wireless_transmitter.distance=%d blocks gui.refinedstorage:crafter=Crafter @@ -47,6 +51,7 @@ misc.refinedstorage:yes=Yes misc.refinedstorage:no=No misc.refinedstorage:start=Start misc.refinedstorage:clear=Clear +misc.refinedstorage:none=None misc.refinedstorage:priority=Priority misc.refinedstorage:processing=Processing diff --git a/src/main/resources/assets/refinedstorage/lang/nl_NL.lang b/src/main/resources/assets/refinedstorage/lang/nl_NL.lang index 95d823718..b303e9897 100755 --- a/src/main/resources/assets/refinedstorage/lang/nl_NL.lang +++ b/src/main/resources/assets/refinedstorage/lang/nl_NL.lang @@ -21,6 +21,10 @@ gui.refinedstorage:relay=Relais gui.refinedstorage:interface.import=Interface Import gui.refinedstorage:interface.export=Interface Export gui.refinedstorage:crafting_monitor=Crafting Monitor +gui.refinedstorage:crafting_monitor.missing_items=Ontbrekende items: +gui.refinedstorage:crafting_monitor.items_crafting=Items aan het craften: +gui.refinedstorage:crafting_monitor.items_processing=Items aan het verwerken: +gui.refinedstorage:crafting_monitor.missing_machine=Ontbrekende machine! gui.refinedstorage:wireless_transmitter=Draadloze Zender gui.refinedstorage:wireless_transmitter.distance=%d blokken gui.refinedstorage:crafter=Crafter @@ -47,6 +51,7 @@ misc.refinedstorage:yes=Ja misc.refinedstorage:no=Nee misc.refinedstorage:start=Start misc.refinedstorage:clear=Legen +misc.refinedstorage:none=Geen misc.refinedstorage:priority=Prioriteit misc.refinedstorage:processing=Verwerking