diff --git a/src/main/java/com/raoulvdberge/refinedstorage/api/autocrafting/craftingmonitor/ICraftingMonitorElement.java b/src/main/java/com/raoulvdberge/refinedstorage/api/autocrafting/craftingmonitor/ICraftingMonitorElement.java index b57ea43ad..adc6d14c3 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/api/autocrafting/craftingmonitor/ICraftingMonitorElement.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/api/autocrafting/craftingmonitor/ICraftingMonitorElement.java @@ -12,17 +12,13 @@ import javax.annotation.Nullable; */ public interface ICraftingMonitorElement { /** - * @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 + * @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 + * @param selected whether the element is selected */ @SideOnly(Side.CLIENT) - void draw(int x, int y, IElementDrawers drawers); - - /** - * @return whether the crafting monitor can draw a selection background behind the element when selected - */ - boolean canDrawSelection(); + void draw(int x, int y, IElementDrawers drawers, boolean selected); /** * Returns the position of the corresponding task in the crafting task list. diff --git a/src/main/java/com/raoulvdberge/refinedstorage/api/render/IElementDrawers.java b/src/main/java/com/raoulvdberge/refinedstorage/api/render/IElementDrawers.java index 3cff02bb3..03d326fcf 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/api/render/IElementDrawers.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/api/render/IElementDrawers.java @@ -30,7 +30,7 @@ public interface IElementDrawers { } /** - * @return an overlay drawer, colour will be the element + * @return an overlay drawer, color will be the element */ default IElementDrawer getOverlayDrawer() { return getNullDrawer(); diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/craftingmonitor/CraftingMonitorElementError.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/craftingmonitor/CraftingMonitorElementColor.java old mode 100755 new mode 100644 similarity index 53% rename from src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/craftingmonitor/CraftingMonitorElementError.java rename to src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/craftingmonitor/CraftingMonitorElementColor.java index 913e09613..c2735fd0c --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/craftingmonitor/CraftingMonitorElementError.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/craftingmonitor/CraftingMonitorElementColor.java @@ -7,27 +7,37 @@ import net.minecraftforge.fml.common.network.ByteBufUtils; import javax.annotation.Nullable; -public class CraftingMonitorElementError implements ICraftingMonitorElement { - public static final String ID = "error"; +public class CraftingMonitorElementColor implements ICraftingMonitorElement { + public static final int COLOR_INFO = 0xFFD9EDF7; + public static final int COLOR_ERROR = 0xFFF2DEDE; + public static final int COLOR_SUCCESS = 0XFFADDBC6; + + public static final String ID = "color"; private ICraftingMonitorElement base; private String tooltip; + private int color; + private int darkenedColor; - public CraftingMonitorElementError(ICraftingMonitorElement base, @Nullable String tooltip) { + public CraftingMonitorElementColor(ICraftingMonitorElement base, @Nullable String tooltip, int color) { this.base = base; this.tooltip = tooltip; + this.color = color; + + float ratio = 1.0F - 0.1F; + int a = (color >> 24) & 0xFF; + int r = (int) (((color >> 16) & 0xFF) * ratio); + int g = (int) (((color >> 8) & 0xFF) * ratio); + int b = (int) ((color & 0xFF) * ratio); + + this.darkenedColor = (a << 24) | (r << 16) | (g << 8) | b; } @Override - public void draw(int x, int y, IElementDrawers drawers) { - drawers.getOverlayDrawer().draw(x, y, 0xFFF2DEDE); + public void draw(int x, int y, IElementDrawers drawers, boolean selected) { + drawers.getOverlayDrawer().draw(x, y, selected ? darkenedColor : color); - base.draw(x, y, drawers); - } - - @Override - public boolean canDrawSelection() { - return false; + base.draw(x, y, drawers, false); } @Override @@ -48,6 +58,7 @@ public class CraftingMonitorElementError implements ICraftingMonitorElement { @Override public void write(ByteBuf buf) { + buf.writeInt(color); ByteBufUtils.writeUTF8String(buf, base.getId()); ByteBufUtils.writeUTF8String(buf, tooltip); @@ -56,11 +67,11 @@ public class CraftingMonitorElementError implements ICraftingMonitorElement { @Override public boolean merge(ICraftingMonitorElement element) { - return element.getId().equals(getId()) && elementHashCode() == element.elementHashCode() && base.merge(((CraftingMonitorElementError) element).base); + return element.getId().equals(getId()) && elementHashCode() == element.elementHashCode() && base.merge(((CraftingMonitorElementColor) element).base); } @Override public int elementHashCode() { - return base.elementHashCode() ^ tooltip.hashCode(); + return base.elementHashCode() ^ tooltip.hashCode() ^ color; } } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/craftingmonitor/CraftingMonitorElementFluidRender.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/craftingmonitor/CraftingMonitorElementFluidRender.java index c70fef725..22e83ca3b 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/craftingmonitor/CraftingMonitorElementFluidRender.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/craftingmonitor/CraftingMonitorElementFluidRender.java @@ -26,7 +26,11 @@ public class CraftingMonitorElementFluidRender implements ICraftingMonitorElemen @Override @SideOnly(Side.CLIENT) - public void draw(int x, int y, IElementDrawers drawers) { + public void draw(int x, int y, IElementDrawers drawers, boolean selected) { + if (selected) { + drawers.getOverlayDrawer().draw(x, y, 0xFFCCCCCC); + } + drawers.getFluidDrawer().draw(x + 2 + offset, y + 1, stack); float scale = drawers.getFontRenderer().getUnicodeFlag() ? 1F : 0.5F; @@ -39,11 +43,6 @@ public class CraftingMonitorElementFluidRender implements ICraftingMonitorElemen GlStateManager.popMatrix(); } - @Override - public boolean canDrawSelection() { - return true; - } - @Override public int getTaskId() { return taskId; diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/craftingmonitor/CraftingMonitorElementInfo.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/craftingmonitor/CraftingMonitorElementInfo.java deleted file mode 100755 index 579430466..000000000 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/craftingmonitor/CraftingMonitorElementInfo.java +++ /dev/null @@ -1,66 +0,0 @@ -package com.raoulvdberge.refinedstorage.apiimpl.autocrafting.craftingmonitor; - -import com.raoulvdberge.refinedstorage.api.autocrafting.craftingmonitor.ICraftingMonitorElement; -import com.raoulvdberge.refinedstorage.api.render.IElementDrawers; -import io.netty.buffer.ByteBuf; -import net.minecraftforge.fml.common.network.ByteBufUtils; - -import javax.annotation.Nullable; - -public class CraftingMonitorElementInfo implements ICraftingMonitorElement { - public static final String ID = "info"; - - private ICraftingMonitorElement base; - private String tooltip; - - public CraftingMonitorElementInfo(ICraftingMonitorElement base, @Nullable String tooltip) { - this.base = base; - this.tooltip = tooltip; - } - - @Override - public void draw(int x, int y, IElementDrawers drawers) { - drawers.getOverlayDrawer().draw(x, y, 0xFFD9EDF7); - - 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 - @Nullable - public String getTooltip() { - return tooltip; - } - - @Override - public void write(ByteBuf buf) { - ByteBufUtils.writeUTF8String(buf, base.getId()); - ByteBufUtils.writeUTF8String(buf, tooltip); - - base.write(buf); - } - - @Override - public boolean merge(ICraftingMonitorElement element) { - return element.getId().equals(getId()) && elementHashCode() == element.elementHashCode() && base.merge(((CraftingMonitorElementInfo) element).base); - } - - @Override - public int elementHashCode() { - return base.elementHashCode() ^ tooltip.hashCode(); - } -} diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/craftingmonitor/CraftingMonitorElementItemRender.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/craftingmonitor/CraftingMonitorElementItemRender.java index cf4b2f6b8..d9f14f126 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/craftingmonitor/CraftingMonitorElementItemRender.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/craftingmonitor/CraftingMonitorElementItemRender.java @@ -28,7 +28,11 @@ public class CraftingMonitorElementItemRender implements ICraftingMonitorElement @Override @SideOnly(Side.CLIENT) - public void draw(int x, int y, IElementDrawers drawers) { + public void draw(int x, int y, IElementDrawers drawers, boolean selected) { + if (selected) { + drawers.getOverlayDrawer().draw(x, y, 0xFFCCCCCC); + } + drawers.getItemDrawer().draw(x + 2 + offset, y + 1, stack); float scale = drawers.getFontRenderer().getUnicodeFlag() ? 1F : 0.5F; @@ -41,11 +45,6 @@ public class CraftingMonitorElementItemRender implements ICraftingMonitorElement GlStateManager.popMatrix(); } - @Override - public boolean canDrawSelection() { - return true; - } - @Override public int getTaskId() { return taskId; diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/craftingmonitor/CraftingMonitorElementText.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/craftingmonitor/CraftingMonitorElementText.java index 583e3b409..b7edd7c3a 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/craftingmonitor/CraftingMonitorElementText.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/craftingmonitor/CraftingMonitorElementText.java @@ -31,7 +31,11 @@ public class CraftingMonitorElementText implements ICraftingMonitorElement { @Override @SideOnly(Side.CLIENT) - public void draw(int x, int y, IElementDrawers drawers) { + public void draw(int x, int y, IElementDrawers drawers, boolean selected) { + if (selected) { + drawers.getOverlayDrawer().draw(x, y, 0xFFCCCCCC); + } + float scale = drawers.getFontRenderer().getUnicodeFlag() ? 1F : 0.5F; GlStateManager.pushMatrix(); @@ -42,11 +46,6 @@ public class CraftingMonitorElementText implements ICraftingMonitorElement { GlStateManager.popMatrix(); } - @Override - public boolean canDrawSelection() { - return true; - } - @Override public int getTaskId() { return -1; diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/task/CraftingTask.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/task/CraftingTask.java index e56cef4a9..b0e4e2de8 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/task/CraftingTask.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/task/CraftingTask.java @@ -9,8 +9,7 @@ import com.raoulvdberge.refinedstorage.api.network.INetwork; import com.raoulvdberge.refinedstorage.api.util.IComparer; import com.raoulvdberge.refinedstorage.api.util.IStackList; import com.raoulvdberge.refinedstorage.apiimpl.API; -import com.raoulvdberge.refinedstorage.apiimpl.autocrafting.craftingmonitor.CraftingMonitorElementError; -import com.raoulvdberge.refinedstorage.apiimpl.autocrafting.craftingmonitor.CraftingMonitorElementInfo; +import com.raoulvdberge.refinedstorage.apiimpl.autocrafting.craftingmonitor.CraftingMonitorElementColor; import com.raoulvdberge.refinedstorage.apiimpl.autocrafting.craftingmonitor.CraftingMonitorElementItemRender; import com.raoulvdberge.refinedstorage.apiimpl.autocrafting.craftingmonitor.CraftingMonitorElementText; import com.raoulvdberge.refinedstorage.apiimpl.autocrafting.preview.CraftingPreviewElementItemStack; @@ -240,12 +239,12 @@ public class CraftingTask implements ICraftingTask { if (!missing.isEmpty()) { elements.directAdd(new CraftingMonitorElementText("gui.refinedstorage:crafting_monitor.items_missing", 16)); - missing.getStacks().stream().map(stack -> new CraftingMonitorElementError(new CraftingMonitorElementItemRender( + missing.getStacks().stream().map(stack -> new CraftingMonitorElementColor(new CraftingMonitorElementItemRender( -1, stack, stack.getCount(), 32 - ), "")).forEach(elements::add); + ), "", CraftingMonitorElementColor.COLOR_ERROR)).forEach(elements::add); elements.commit(); } @@ -262,7 +261,7 @@ public class CraftingTask implements ICraftingTask { ); if (item.getStatus() == CraftingInserterItemStatus.FULL) { - element = new CraftingMonitorElementError(element, "gui.refinedstorage:crafting_monitor.network_full"); + element = new CraftingMonitorElementColor(element, "gui.refinedstorage:crafting_monitor.network_full", CraftingMonitorElementColor.COLOR_ERROR); } elements.add(element); @@ -290,7 +289,7 @@ public class CraftingTask implements ICraftingTask { ); if (status == CraftingExtractorItemStatus.MISSING) { - element = new CraftingMonitorElementInfo(element, "gui.refinedstorage:crafting_monitor.waiting_for_items"); + element = new CraftingMonitorElementColor(element, "gui.refinedstorage:crafting_monitor.waiting_for_items", CraftingMonitorElementColor.COLOR_INFO); } elements.add(element); @@ -320,11 +319,13 @@ public class CraftingTask implements ICraftingTask { ); if (status == CraftingExtractorItemStatus.MISSING) { - element = new CraftingMonitorElementInfo(element, "gui.refinedstorage:crafting_monitor.waiting_for_items"); + element = new CraftingMonitorElementColor(element, "gui.refinedstorage:crafting_monitor.waiting_for_items", CraftingMonitorElementColor.COLOR_INFO); } else if (status == CraftingExtractorItemStatus.MACHINE_DOES_NOT_ACCEPT) { - element = new CraftingMonitorElementError(element, "gui.refinedstorage:crafting_monitor.machine_does_not_accept"); + element = new CraftingMonitorElementColor(element, "gui.refinedstorage:crafting_monitor.machine_does_not_accept", CraftingMonitorElementColor.COLOR_ERROR); } else if (status == CraftingExtractorItemStatus.MACHINE_NONE) { - element = new CraftingMonitorElementError(element, "gui.refinedstorage:crafting_monitor.machine_none"); + element = new CraftingMonitorElementColor(element, "gui.refinedstorage:crafting_monitor.machine_none", CraftingMonitorElementColor.COLOR_ERROR); + } else if (status == CraftingExtractorItemStatus.EXTRACTED) { + element = new CraftingMonitorElementColor(element, "gui.refinedstorage:crafting_monitor.item_inserted_into_machine", CraftingMonitorElementColor.COLOR_SUCCESS); } elements.add(element); diff --git a/src/main/java/com/raoulvdberge/refinedstorage/gui/GuiCraftingMonitor.java b/src/main/java/com/raoulvdberge/refinedstorage/gui/GuiCraftingMonitor.java index b2d66c04d..7d84849f4 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/gui/GuiCraftingMonitor.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/gui/GuiCraftingMonitor.java @@ -138,10 +138,6 @@ public class GuiCraftingMonitor extends GuiBase implements IResizableDisplay { } drawTexture(x, yy, 0, getTopHeight() + (18 * 3), screenWidth, getBottomHeight()); - - if (itemSelectedX != -1 && itemSelectedY != -1 && itemSelected >= 0 && itemSelected < getElements().size() && getElements().get(itemSelected).canDrawSelection()) { - drawRect(x + itemSelectedX, y + itemSelectedY, x + itemSelectedX + ITEM_WIDTH, y + itemSelectedY + ITEM_HEIGHT - 1, 0xFFCCCCCC); - } } @Override @@ -173,7 +169,7 @@ public class GuiCraftingMonitor extends GuiBase implements IResizableDisplay { itemSelectedTooltip = element.getTooltip(); } - element.draw(x, y, drawers); + element.draw(x, y, drawers, item == itemSelected); y += ITEM_HEIGHT; } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/proxy/ProxyCommon.java b/src/main/java/com/raoulvdberge/refinedstorage/proxy/ProxyCommon.java index aaa6753e9..7121281dd 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/proxy/ProxyCommon.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/proxy/ProxyCommon.java @@ -6,7 +6,10 @@ import com.raoulvdberge.refinedstorage.RS; import com.raoulvdberge.refinedstorage.RSBlocks; import com.raoulvdberge.refinedstorage.RSItems; import com.raoulvdberge.refinedstorage.apiimpl.API; -import com.raoulvdberge.refinedstorage.apiimpl.autocrafting.craftingmonitor.*; +import com.raoulvdberge.refinedstorage.apiimpl.autocrafting.craftingmonitor.CraftingMonitorElementColor; +import com.raoulvdberge.refinedstorage.apiimpl.autocrafting.craftingmonitor.CraftingMonitorElementFluidRender; +import com.raoulvdberge.refinedstorage.apiimpl.autocrafting.craftingmonitor.CraftingMonitorElementItemRender; +import com.raoulvdberge.refinedstorage.apiimpl.autocrafting.craftingmonitor.CraftingMonitorElementText; import com.raoulvdberge.refinedstorage.apiimpl.autocrafting.preview.CraftingPreviewElementError; import com.raoulvdberge.refinedstorage.apiimpl.autocrafting.preview.CraftingPreviewElementFluidStack; import com.raoulvdberge.refinedstorage.apiimpl.autocrafting.preview.CraftingPreviewElementItemStack; @@ -88,17 +91,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(), StackUtils.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 -> { + API.instance().getCraftingMonitorElementRegistry().add(CraftingMonitorElementColor.ID, buf -> { + int color = buf.readInt(); String id = ByteBufUtils.readUTF8String(buf); String tooltip = ByteBufUtils.readUTF8String(buf); - return new CraftingMonitorElementError(API.instance().getCraftingMonitorElementRegistry().get(id).apply(buf), tooltip); - }); - API.instance().getCraftingMonitorElementRegistry().add(CraftingMonitorElementInfo.ID, buf -> { - String id = ByteBufUtils.readUTF8String(buf); - String tooltip = ByteBufUtils.readUTF8String(buf); - - return new CraftingMonitorElementInfo(API.instance().getCraftingMonitorElementRegistry().get(id).apply(buf), tooltip); + return new CraftingMonitorElementColor(API.instance().getCraftingMonitorElementRegistry().get(id).apply(buf), tooltip, color); }); API.instance().getCraftingPreviewElementRegistry().add(CraftingPreviewElementItemStack.ID, CraftingPreviewElementItemStack::fromByteBuf); diff --git a/src/main/resources/assets/refinedstorage/lang/en_us.lang b/src/main/resources/assets/refinedstorage/lang/en_us.lang index 7ff78dd65..03de5c77e 100644 --- a/src/main/resources/assets/refinedstorage/lang/en_us.lang +++ b/src/main/resources/assets/refinedstorage/lang/en_us.lang @@ -34,6 +34,7 @@ gui.refinedstorage:crafting_monitor.machine_does_not_accept=Machine doesn't acce gui.refinedstorage:crafting_monitor.machine_none=No machine found gui.refinedstorage:crafting_monitor.waiting_for_items=Waiting for items gui.refinedstorage:crafting_monitor.network_full=Network is full +gui.refinedstorage:crafting_monitor.item_inserted_into_machine=Item is inserted into machine, waiting for result gui.refinedstorage:wireless_transmitter=Wireless Transmitter gui.refinedstorage:wireless_transmitter.distance=%d block(s) gui.refinedstorage:crafter=Crafter