From 8a7f301abc5c4756c4d4151f1b4efcb32b137fbd Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Wed, 19 Oct 2016 19:00:55 +0200 Subject: [PATCH] Better crafting monitor element for machines in use / machine not found --- .../ICraftingMonitorElement.java | 25 ++++++--- .../ICraftingMonitorElementDrawers.java | 15 +++++ .../api/autocrafting/task/IProcessable.java | 4 +- .../CraftingMonitorElementError.java | 53 ++++++++++++++++++ .../CraftingMonitorElementFluidRender.java | 14 +++-- .../CraftingMonitorElementItemRender.java | 14 +++-- .../CraftingMonitorElementText.java | 13 +++-- .../autocrafting/task/CraftingTask.java | 29 +++++----- .../autocrafting/task/Processable.java | 2 +- .../gui/GuiCraftingMonitor.java | 52 +++++++++++++++-- .../refinedstorage/proxy/ProxyCommon.java | 7 +++ .../assets/refinedstorage/lang/en_US.lang | 2 +- .../textures/gui/crafting_monitor.png | Bin 1877 -> 1877 bytes .../textures/gui/crafting_preview.png | Bin 1789 -> 1829 bytes 14 files changed, 181 insertions(+), 49 deletions(-) create mode 100755 src/main/java/refinedstorage/api/autocrafting/craftingmonitor/ICraftingMonitorElementDrawers.java create mode 100755 src/main/java/refinedstorage/apiimpl/autocrafting/craftingmonitor/CraftingMonitorElementError.java diff --git a/src/main/java/refinedstorage/api/autocrafting/craftingmonitor/ICraftingMonitorElement.java b/src/main/java/refinedstorage/api/autocrafting/craftingmonitor/ICraftingMonitorElement.java index 8f3f79da0..23917fe1d 100755 --- a/src/main/java/refinedstorage/api/autocrafting/craftingmonitor/ICraftingMonitorElement.java +++ b/src/main/java/refinedstorage/api/autocrafting/craftingmonitor/ICraftingMonitorElement.java @@ -1,25 +1,25 @@ package refinedstorage.api.autocrafting.craftingmonitor; import io.netty.buffer.ByteBuf; -import net.minecraft.item.ItemStack; -import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; -import refinedstorage.api.render.IElementDrawer; /** * Represents a crafting monitor element. */ public interface ICraftingMonitorElement { /** - * @param x position on the x axis to render - * @param y position on the y axis to render - * @param itemDrawer a drawer for {@link ItemStack}s - * @param fluidDrawer a drawer for {@link FluidStack}s - * @param stringDrawer a drawer for {@link String}s + * @param x position on the x axis to render + * @param y position on the y axis to render + * @param drawers the drawers that this element can use */ @SideOnly(Side.CLIENT) - void draw(int x, int y, IElementDrawer itemDrawer, IElementDrawer fluidDrawer, IElementDrawer stringDrawer); + void draw(int x, int y, ICraftingMonitorElementDrawers drawers); + + /** + * @return whether the crafting monitor can draw a grey background behind the element when selected + */ + boolean canDrawSelection(); /** * Returns the position where the corresponding task is in the crafting task list. @@ -36,6 +36,13 @@ public interface ICraftingMonitorElement { */ String getId(); + /** + * @return the tooltip of this element, or null for no tooltip + */ + default String getTooltip() { + return null; + } + /** * Writes the data to the network. * diff --git a/src/main/java/refinedstorage/api/autocrafting/craftingmonitor/ICraftingMonitorElementDrawers.java b/src/main/java/refinedstorage/api/autocrafting/craftingmonitor/ICraftingMonitorElementDrawers.java new file mode 100755 index 000000000..ea96cc068 --- /dev/null +++ b/src/main/java/refinedstorage/api/autocrafting/craftingmonitor/ICraftingMonitorElementDrawers.java @@ -0,0 +1,15 @@ +package refinedstorage.api.autocrafting.craftingmonitor; + +import net.minecraft.item.ItemStack; +import net.minecraftforge.fluids.FluidStack; +import refinedstorage.api.render.IElementDrawer; + +public interface ICraftingMonitorElementDrawers { + IElementDrawer getItemDrawer(); + + IElementDrawer getFluidDrawer(); + + IElementDrawer getStringDrawer(); + + IElementDrawer getRedOverlayDrawer(); +} diff --git a/src/main/java/refinedstorage/api/autocrafting/task/IProcessable.java b/src/main/java/refinedstorage/api/autocrafting/task/IProcessable.java index 756bb9ebd..b1204b602 100755 --- a/src/main/java/refinedstorage/api/autocrafting/task/IProcessable.java +++ b/src/main/java/refinedstorage/api/autocrafting/task/IProcessable.java @@ -5,8 +5,6 @@ import net.minecraft.nbt.NBTTagCompound; import refinedstorage.api.autocrafting.ICraftingPattern; import refinedstorage.api.util.IItemStackList; -import java.util.Deque; - /** * Represents a item in a crafting task that can be processed. */ @@ -31,7 +29,7 @@ public interface IProcessable { void setStartedProcessing(); - boolean isStartedProcessing(); + boolean hasStartedProcessing(); /** * @return true if we received all outputs, false otherwise diff --git a/src/main/java/refinedstorage/apiimpl/autocrafting/craftingmonitor/CraftingMonitorElementError.java b/src/main/java/refinedstorage/apiimpl/autocrafting/craftingmonitor/CraftingMonitorElementError.java new file mode 100755 index 000000000..b5cb6b69d --- /dev/null +++ b/src/main/java/refinedstorage/apiimpl/autocrafting/craftingmonitor/CraftingMonitorElementError.java @@ -0,0 +1,53 @@ +package refinedstorage.apiimpl.autocrafting.craftingmonitor; + +import io.netty.buffer.ByteBuf; +import net.minecraftforge.fml.common.network.ByteBufUtils; +import refinedstorage.api.autocrafting.craftingmonitor.ICraftingMonitorElement; +import refinedstorage.api.autocrafting.craftingmonitor.ICraftingMonitorElementDrawers; + +public class CraftingMonitorElementError implements ICraftingMonitorElement { + public static final String ID = "error"; + + private ICraftingMonitorElement base; + private String tooltip; + + public CraftingMonitorElementError(ICraftingMonitorElement base, String tooltip) { + this.base = base; + this.tooltip = tooltip; + } + + @Override + public void draw(int x, int y, ICraftingMonitorElementDrawers drawers) { + drawers.getRedOverlayDrawer().draw(x, y, null); + + base.draw(x, y, drawers); + } + + @Override + public boolean canDrawSelection() { + return false; + } + + @Override + public int getTaskId() { + return base.getTaskId(); + } + + @Override + public String getId() { + return ID; + } + + @Override + public String getTooltip() { + return tooltip; + } + + @Override + public void write(ByteBuf buf) { + ByteBufUtils.writeUTF8String(buf, base.getId()); + ByteBufUtils.writeUTF8String(buf, tooltip); + + base.write(buf); + } +} diff --git a/src/main/java/refinedstorage/apiimpl/autocrafting/craftingmonitor/CraftingMonitorElementFluidRender.java b/src/main/java/refinedstorage/apiimpl/autocrafting/craftingmonitor/CraftingMonitorElementFluidRender.java index 42f54375f..6063e08a8 100755 --- a/src/main/java/refinedstorage/apiimpl/autocrafting/craftingmonitor/CraftingMonitorElementFluidRender.java +++ b/src/main/java/refinedstorage/apiimpl/autocrafting/craftingmonitor/CraftingMonitorElementFluidRender.java @@ -2,13 +2,12 @@ package refinedstorage.apiimpl.autocrafting.craftingmonitor; import io.netty.buffer.ByteBuf; import net.minecraft.client.renderer.GlStateManager; -import net.minecraft.item.ItemStack; import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; import refinedstorage.RSUtils; import refinedstorage.api.autocrafting.craftingmonitor.ICraftingMonitorElement; -import refinedstorage.api.render.IElementDrawer; +import refinedstorage.api.autocrafting.craftingmonitor.ICraftingMonitorElementDrawers; import refinedstorage.gui.GuiBase; public class CraftingMonitorElementFluidRender implements ICraftingMonitorElement { @@ -26,19 +25,24 @@ public class CraftingMonitorElementFluidRender implements ICraftingMonitorElemen @Override @SideOnly(Side.CLIENT) - public void draw(int x, int y, IElementDrawer itemDrawer, IElementDrawer fluidDrawer, IElementDrawer stringDrawer) { - fluidDrawer.draw(x + 2 + offset, y + 1, stack); + public void draw(int x, int y, ICraftingMonitorElementDrawers drawers) { + drawers.getFluidDrawer().draw(x + 2 + offset, y + 1, stack); float scale = 0.5f; GlStateManager.pushMatrix(); GlStateManager.scale(scale, scale, 1); - stringDrawer.draw(GuiBase.calculateOffsetOnScale(x + 21 + offset, scale), GuiBase.calculateOffsetOnScale(y + 7, scale), RSUtils.formatFluidStackQuantity(stack) + " " + stack.getLocalizedName()); + drawers.getStringDrawer().draw(GuiBase.calculateOffsetOnScale(x + 21 + offset, scale), GuiBase.calculateOffsetOnScale(y + 7, scale), RSUtils.formatFluidStackQuantity(stack) + " " + stack.getLocalizedName()); GlStateManager.popMatrix(); } + @Override + public boolean canDrawSelection() { + return true; + } + @Override public int getTaskId() { return taskId; diff --git a/src/main/java/refinedstorage/apiimpl/autocrafting/craftingmonitor/CraftingMonitorElementItemRender.java b/src/main/java/refinedstorage/apiimpl/autocrafting/craftingmonitor/CraftingMonitorElementItemRender.java index b422a68b8..f0399f16b 100755 --- a/src/main/java/refinedstorage/apiimpl/autocrafting/craftingmonitor/CraftingMonitorElementItemRender.java +++ b/src/main/java/refinedstorage/apiimpl/autocrafting/craftingmonitor/CraftingMonitorElementItemRender.java @@ -3,12 +3,11 @@ package refinedstorage.apiimpl.autocrafting.craftingmonitor; import io.netty.buffer.ByteBuf; import net.minecraft.client.renderer.GlStateManager; import net.minecraft.item.ItemStack; -import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fml.common.network.ByteBufUtils; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; import refinedstorage.api.autocrafting.craftingmonitor.ICraftingMonitorElement; -import refinedstorage.api.render.IElementDrawer; +import refinedstorage.api.autocrafting.craftingmonitor.ICraftingMonitorElementDrawers; import refinedstorage.gui.GuiBase; public class CraftingMonitorElementItemRender implements ICraftingMonitorElement { @@ -28,19 +27,24 @@ public class CraftingMonitorElementItemRender implements ICraftingMonitorElement @Override @SideOnly(Side.CLIENT) - public void draw(int x, int y, IElementDrawer itemDrawer, IElementDrawer fluidDrawer, IElementDrawer stringDrawer) { - itemDrawer.draw(x + 2 + offset, y + 1, stack); + public void draw(int x, int y, ICraftingMonitorElementDrawers drawers) { + drawers.getItemDrawer().draw(x + 2 + offset, y + 1, stack); float scale = 0.5f; GlStateManager.pushMatrix(); GlStateManager.scale(scale, scale, 1); - stringDrawer.draw(GuiBase.calculateOffsetOnScale(x + 21 + offset, scale), GuiBase.calculateOffsetOnScale(y + 7, scale), quantity + " " + stack.getDisplayName()); + drawers.getStringDrawer().draw(GuiBase.calculateOffsetOnScale(x + 21 + offset, scale), GuiBase.calculateOffsetOnScale(y + 7, scale), quantity + " " + stack.getDisplayName()); GlStateManager.popMatrix(); } + @Override + public boolean canDrawSelection() { + return true; + } + @Override public int getTaskId() { return taskId; diff --git a/src/main/java/refinedstorage/apiimpl/autocrafting/craftingmonitor/CraftingMonitorElementText.java b/src/main/java/refinedstorage/apiimpl/autocrafting/craftingmonitor/CraftingMonitorElementText.java index 58443b46a..988ade886 100755 --- a/src/main/java/refinedstorage/apiimpl/autocrafting/craftingmonitor/CraftingMonitorElementText.java +++ b/src/main/java/refinedstorage/apiimpl/autocrafting/craftingmonitor/CraftingMonitorElementText.java @@ -3,13 +3,11 @@ package refinedstorage.apiimpl.autocrafting.craftingmonitor; import io.netty.buffer.ByteBuf; import net.minecraft.client.renderer.GlStateManager; import net.minecraft.client.resources.I18n; -import net.minecraft.item.ItemStack; -import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fml.common.network.ByteBufUtils; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; import refinedstorage.api.autocrafting.craftingmonitor.ICraftingMonitorElement; -import refinedstorage.api.render.IElementDrawer; +import refinedstorage.api.autocrafting.craftingmonitor.ICraftingMonitorElementDrawers; import refinedstorage.gui.GuiBase; public class CraftingMonitorElementText implements ICraftingMonitorElement { @@ -33,17 +31,22 @@ public class CraftingMonitorElementText implements ICraftingMonitorElement itemDrawer, IElementDrawer fluidDrawer, IElementDrawer stringDrawer) { + public void draw(int x, int y, ICraftingMonitorElementDrawers drawers) { float scale = 0.5f; GlStateManager.pushMatrix(); GlStateManager.scale(scale, scale, 1); - stringDrawer.draw(GuiBase.calculateOffsetOnScale(x + offset, scale), GuiBase.calculateOffsetOnScale(y + 7, scale), I18n.format(text)); + drawers.getStringDrawer().draw(GuiBase.calculateOffsetOnScale(x + offset, scale), GuiBase.calculateOffsetOnScale(y + 7, scale), I18n.format(text)); GlStateManager.popMatrix(); } + @Override + public boolean canDrawSelection() { + return true; + } + @Override public int getTaskId() { return -1; diff --git a/src/main/java/refinedstorage/apiimpl/autocrafting/task/CraftingTask.java b/src/main/java/refinedstorage/apiimpl/autocrafting/task/CraftingTask.java index fdf165938..ff01c3045 100755 --- a/src/main/java/refinedstorage/apiimpl/autocrafting/task/CraftingTask.java +++ b/src/main/java/refinedstorage/apiimpl/autocrafting/task/CraftingTask.java @@ -17,6 +17,7 @@ import refinedstorage.api.util.IComparer; import refinedstorage.api.util.IFluidStackList; import refinedstorage.api.util.IItemStackList; import refinedstorage.apiimpl.API; +import refinedstorage.apiimpl.autocrafting.craftingmonitor.CraftingMonitorElementError; import refinedstorage.apiimpl.autocrafting.craftingmonitor.CraftingMonitorElementFluidRender; import refinedstorage.apiimpl.autocrafting.craftingmonitor.CraftingMonitorElementItemRender; import refinedstorage.apiimpl.autocrafting.craftingmonitor.CraftingMonitorElementText; @@ -236,7 +237,7 @@ public class CraftingTask implements ICraftingTask { for (IProcessable processable : toProcess) { IItemHandler inventory = processable.getPattern().getContainer().getFacingInventory(); - if (!processable.isStartedProcessing() && inventory != null && processable.canStartProcessing(network.getItemStorageCache().getList()) && canProcess(processable)) { + if (inventory != null && !processable.hasStartedProcessing() && processable.canStartProcessing(network.getItemStorageCache().getList()) && canProcess(processable)) { processable.setStartedProcessing(); for (ItemStack insertStack : processable.getToInsert().getStacks()) { @@ -302,8 +303,8 @@ public class CraftingTask implements ICraftingTask { private boolean canProcess(IProcessable processable) { for (ICraftingTask otherTask : network.getCraftingTasks()) { for (IProcessable otherProcessable : otherTask.getToProcess()) { - if (otherProcessable != processable && !otherProcessable.hasReceivedOutputs() && otherProcessable.isStartedProcessing()) { - if (!isPatternsEqual(processable.getPattern(), otherProcessable.getPattern())) { + if (otherProcessable != processable && !otherProcessable.hasReceivedOutputs() && otherProcessable.hasStartedProcessing() && otherProcessable.getPattern().getContainer().getFacingTile() != null) { + if (!arePatternsEqual(processable.getPattern(), otherProcessable.getPattern())) { if (processable.getPattern().getContainer().getFacingTile().getPos().equals(otherProcessable.getPattern().getContainer().getFacingTile().getPos())) { return false; } @@ -315,7 +316,7 @@ public class CraftingTask implements ICraftingTask { return true; } - private boolean isPatternsEqual(ICraftingPattern left, ICraftingPattern right) { + private boolean arePatternsEqual(ICraftingPattern left, ICraftingPattern right) { for (int i = 0; i < 9; ++i) { ItemStack leftStack = left.getInputs().get(i); ItemStack rightStack = right.getInputs().get(i); @@ -436,23 +437,23 @@ public class CraftingTask implements ICraftingTask { elements.add(new CraftingMonitorElementText("gui.refinedstorage:crafting_monitor.items_processing", 16)); for (IProcessable processable : toProcess) { - if (processable.hasReceivedOutputs()) { - continue; - } - for (int i = 0; i < processable.getPattern().getOutputs().size(); ++i) { if (!processable.hasReceivedOutput(i)) { - elements.add(new CraftingMonitorElementItemRender( + ICraftingMonitorElement element = new CraftingMonitorElementItemRender( -1, processable.getPattern().getOutputs().get(i), processable.getPattern().getOutputs().get(i).stackSize, 32 - )); - } - } + ); - if (!canProcess(processable)) { - elements.add(new CraftingMonitorElementText("gui.refinedstorage:crafting_monitor.machine_in_use", 32)); + if (processable.getPattern().getContainer().getFacingTile() == null) { + element = new CraftingMonitorElementError(element, "gui.refinedstorage:crafting_monitor.machine_none"); + } else if (!canProcess(processable)) { + element = new CraftingMonitorElementError(element, "gui.refinedstorage:crafting_monitor.machine_in_use"); + } + + elements.add(element); + } } } } diff --git a/src/main/java/refinedstorage/apiimpl/autocrafting/task/Processable.java b/src/main/java/refinedstorage/apiimpl/autocrafting/task/Processable.java index 175988921..e3b0adb61 100755 --- a/src/main/java/refinedstorage/apiimpl/autocrafting/task/Processable.java +++ b/src/main/java/refinedstorage/apiimpl/autocrafting/task/Processable.java @@ -73,7 +73,7 @@ public class Processable implements IProcessable { } @Override - public boolean isStartedProcessing() { + public boolean hasStartedProcessing() { return startedProcessing; } diff --git a/src/main/java/refinedstorage/gui/GuiCraftingMonitor.java b/src/main/java/refinedstorage/gui/GuiCraftingMonitor.java index 4fac6ac93..7c5c37756 100755 --- a/src/main/java/refinedstorage/gui/GuiCraftingMonitor.java +++ b/src/main/java/refinedstorage/gui/GuiCraftingMonitor.java @@ -1,11 +1,14 @@ package refinedstorage.gui; import net.minecraft.client.gui.GuiButton; +import net.minecraft.client.renderer.GlStateManager; import net.minecraft.client.renderer.RenderHelper; +import net.minecraft.client.resources.I18n; import net.minecraft.item.ItemStack; import net.minecraftforge.fluids.FluidStack; import refinedstorage.RS; import refinedstorage.api.autocrafting.craftingmonitor.ICraftingMonitorElement; +import refinedstorage.api.autocrafting.craftingmonitor.ICraftingMonitorElementDrawers; import refinedstorage.api.render.IElementDrawer; import refinedstorage.container.ContainerCraftingMonitor; import refinedstorage.gui.sidebutton.SideButtonRedstoneMode; @@ -16,6 +19,36 @@ import java.io.IOException; import java.util.List; public class GuiCraftingMonitor extends GuiBase { + public class CraftingMonitorElementDrawers implements ICraftingMonitorElementDrawers { + private IElementDrawer fluidDrawer = (x, y, element) -> FLUID_RENDERER.draw(GuiCraftingMonitor.this.mc, x, y, element); + private IElementDrawer redOverlayDrawer = (x, y, element) -> { + GlStateManager.color(1, 1, 1); + bindTexture("gui/crafting_preview.png"); // Don't even care + drawTexture(x, y, 0, 238, ITEM_WIDTH, ITEM_HEIGHT - 1); + bindTexture("gui/crafting_monitor.png"); + }; + + @Override + public IElementDrawer getItemDrawer() { + return GuiCraftingMonitor.this::drawItem; + } + + @Override + public IElementDrawer getFluidDrawer() { + return fluidDrawer; + } + + @Override + public IElementDrawer getStringDrawer() { + return GuiCraftingMonitor.this::drawString; + } + + @Override + public IElementDrawer getRedOverlayDrawer() { + return redOverlayDrawer; + } + } + private static final int VISIBLE_ROWS = 5; private static final int ITEM_WIDTH = 143; @@ -26,15 +59,13 @@ public class GuiCraftingMonitor extends GuiBase { private GuiButton cancelButton; private GuiButton cancelAllButton; + private ICraftingMonitorElementDrawers drawers = new CraftingMonitorElementDrawers(); + private int itemSelected = -1; private int itemSelectedX = -1; private int itemSelectedY = -1; - private IElementDrawer stringDrawer = this::drawString; - private IElementDrawer itemDrawer = this::drawItem; - private IElementDrawer fluidDrawer = (x, y, element) -> FLUID_RENDERER.draw(mc, x, y, element); - public GuiCraftingMonitor(ContainerCraftingMonitor container, TileCraftingMonitor craftingMonitor) { super(container, 176, 230); @@ -76,7 +107,7 @@ public class GuiCraftingMonitor extends GuiBase { drawTexture(x, y, 0, 0, width, height); - if (itemSelectedX != -1 && itemSelectedY != -1) { + if (itemSelectedX != -1 && itemSelectedY != -1 && itemSelected >= 0 && itemSelected < getElements().size() && getElements().get(itemSelected).canDrawSelection()) { drawTexture(x + itemSelectedX, y + itemSelectedY, 0, 232, ITEM_WIDTH, ITEM_HEIGHT); } } @@ -96,6 +127,7 @@ public class GuiCraftingMonitor extends GuiBase { itemSelectedX = -1; itemSelectedY = -1; + String itemSelectedTooltip = null; for (int i = 0; i < VISIBLE_ROWS; ++i) { if (item < getElements().size()) { @@ -104,9 +136,13 @@ public class GuiCraftingMonitor extends GuiBase { if (item == itemSelected) { itemSelectedX = x; itemSelectedY = y; + + if (inBounds(itemSelectedX, itemSelectedY, ITEM_WIDTH, ITEM_HEIGHT, mouseX, mouseY)) { + itemSelectedTooltip = element.getTooltip(); + } } - element.draw(x, y, itemDrawer, fluidDrawer, stringDrawer); + element.draw(x, y, drawers); x = ox; y += ITEM_HEIGHT; @@ -114,6 +150,10 @@ public class GuiCraftingMonitor extends GuiBase { item++; } + + if (itemSelectedTooltip != null) { + drawTooltip(mouseX, mouseY, I18n.format(itemSelectedTooltip)); + } } private int getRows() { diff --git a/src/main/java/refinedstorage/proxy/ProxyCommon.java b/src/main/java/refinedstorage/proxy/ProxyCommon.java index 2a4b1c4e1..00035b3f3 100755 --- a/src/main/java/refinedstorage/proxy/ProxyCommon.java +++ b/src/main/java/refinedstorage/proxy/ProxyCommon.java @@ -20,6 +20,7 @@ import refinedstorage.RSBlocks; import refinedstorage.RSItems; import refinedstorage.RSUtils; import refinedstorage.apiimpl.API; +import refinedstorage.apiimpl.autocrafting.craftingmonitor.CraftingMonitorElementError; import refinedstorage.apiimpl.autocrafting.craftingmonitor.CraftingMonitorElementFluidRender; import refinedstorage.apiimpl.autocrafting.craftingmonitor.CraftingMonitorElementItemRender; import refinedstorage.apiimpl.autocrafting.craftingmonitor.CraftingMonitorElementText; @@ -58,6 +59,12 @@ public class ProxyCommon { API.instance().getCraftingMonitorElementRegistry().add(CraftingMonitorElementItemRender.ID, buf -> new CraftingMonitorElementItemRender(buf.readInt(), ByteBufUtils.readItemStack(buf), buf.readInt(), buf.readInt())); API.instance().getCraftingMonitorElementRegistry().add(CraftingMonitorElementFluidRender.ID, buf -> new CraftingMonitorElementFluidRender(buf.readInt(), RSUtils.readFluidStack(buf).getRight(), buf.readInt())); API.instance().getCraftingMonitorElementRegistry().add(CraftingMonitorElementText.ID, buf -> new CraftingMonitorElementText(ByteBufUtils.readUTF8String(buf), buf.readInt())); + API.instance().getCraftingMonitorElementRegistry().add(CraftingMonitorElementError.ID, buf -> { + String id = ByteBufUtils.readUTF8String(buf); + String tooltip = ByteBufUtils.readUTF8String(buf); + + return new CraftingMonitorElementError(API.instance().getCraftingMonitorElementRegistry().getFactory(id).apply(buf), tooltip); + }); API.instance().getCraftingPreviewElementRegistry().add(CraftingPreviewElementItemStack.ID, CraftingPreviewElementItemStack::fromByteBuf); API.instance().getCraftingPreviewElementRegistry().add(CraftingPreviewElementFluidStack.ID, CraftingPreviewElementFluidStack::fromByteBuf); diff --git a/src/main/resources/assets/refinedstorage/lang/en_US.lang b/src/main/resources/assets/refinedstorage/lang/en_US.lang index 68b9a4a4b..6d602d067 100755 --- a/src/main/resources/assets/refinedstorage/lang/en_US.lang +++ b/src/main/resources/assets/refinedstorage/lang/en_US.lang @@ -23,7 +23,7 @@ gui.refinedstorage:crafting_monitor.items_taking=Items taking gui.refinedstorage:crafting_monitor.fluids_taking=Fluids taking gui.refinedstorage:crafting_monitor.items_processing=Items processing gui.refinedstorage:crafting_monitor.items_inserting=Items inserting -gui.refinedstorage:crafting_monitor.machine_in_use=Waiting on machine that is in use by another task +gui.refinedstorage:crafting_monitor.machine_in_use=Machine is in use gui.refinedstorage:crafting_monitor.machine_none=No machine found gui.refinedstorage:wireless_transmitter=Wireless Transmitter gui.refinedstorage:wireless_transmitter.distance=%d blocks diff --git a/src/main/resources/assets/refinedstorage/textures/gui/crafting_monitor.png b/src/main/resources/assets/refinedstorage/textures/gui/crafting_monitor.png index 692bf4e431b30a107abc0afb3e4ddd2353942808..0116828ffd9f70ede4aebcbdbb76463e323aeaf5 100755 GIT binary patch delta 23 fcmcc0ca?8L2n*L{1_r*(jE{@%1aFRG`OX9YXfFuh delta 23 fcmcc0ca?8L2n*L11_r(@j2q3WbT-Gad}jgxVGjrE diff --git a/src/main/resources/assets/refinedstorage/textures/gui/crafting_preview.png b/src/main/resources/assets/refinedstorage/textures/gui/crafting_preview.png index a37a2cbff531620394da8bc64d7bfafef964af92..8fc0dddc56cf61403056eb616ef1d06b2c5edd80 100755 GIT binary patch literal 1829 zcmeAS@N?(olHy`uVBq!ia0y~yU<5K58911MRQ8&P5Fo{p?&#~tz_78O`%fY(0|PTd zfKP}kP~6FdgVk3~XA!-(%`TQyKfvcxr_ zBsf2S8?CK&-R3rINV83;AJ z@qlt0_SEt-G-xu+H?`tdn18^dj&+kV&{{C~^vxE^a(Gu=0cA2U>^$JX09N!srQuKM zw>RgQPpBJAif=?U6QX>=Z#g-bMuf!{oC@`GZFhfW_{7=sBwWE7Wf|e_zV5|9_F&(`n&MIrgkqcgKGd-TNVWzdOUGT;>V6(hWJc8B%VuDcm+= zxVeq-#5P`sZMn3NimuC=nthhrfp1;VI#YcH%N<@jukB%Y@<8ip)Mus%&8w#nkX&tf bVAnt9hG)G>SKN=JgM97j>gTe~DWM4f1#%x$ literal 1789 zcmeAS@N?(olHy`uVBq!ia0y~yU<5K58911MRQ8&P5Fo{p?&#~tz_78O`%fY(0|PTd zfKP}kP~6qLG}_)Usv{fED}N*Mto1(s)0h1C9V-A z!TD(=<%vb93~dIoxi25Y&v4lpn<`FpxJhE&A8y?HS2mIH%pVEcq= z|Nkd$H_H!PvPr6$eQ&YoOU=j!Go2$gu6b=#|9Wy=|MoSfbN|ibd?KW*JHO!n?eoHo zF-c2gAEbZNoBp30D4NSqdFlwTbW;eg)0r;833Ld+>Yb9y=H7Rofd&Ye`&aQyNf)`U+$b0>V3 zlLHz5L{k`OO~ah;A3!_>|CtsbL8#r}ki5WKP^o!f)82ny_VPV=??2D5__Q|Tw*O5x zcgueh-TPswy)whiTMQ}L%oEn~I&3o=IF5Jpb^DtSy*)H1I9vjG#?#f$Wt~$(697Mc B1-AeI