From d92453e4fdf7aa394a6d6f39c0e658d3ce830b7b Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Sat, 5 Nov 2016 14:57:45 +0100 Subject: [PATCH] Crafting monitor fixes --- .../api/network/INetworkMaster.java | 2 +- .../container/ContainerCraftingMonitor.java | 3 +- .../gui/GuiCraftingMonitor.java | 37 +++++++++----- .../refinedstorage/gui/GuiHandler.java | 4 +- .../refinedstorage/tile/TileController.java | 50 +++++++++---------- .../craftingmonitor/ICraftingMonitor.java | 5 ++ .../craftingmonitor/TileCraftingMonitor.java | 6 +++ .../WirelessCraftingMonitor.java | 10 ++++ 8 files changed, 75 insertions(+), 42 deletions(-) diff --git a/src/main/java/com/raoulvdberge/refinedstorage/api/network/INetworkMaster.java b/src/main/java/com/raoulvdberge/refinedstorage/api/network/INetworkMaster.java index 8d3ed68a0..b5a062cb7 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/api/network/INetworkMaster.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/api/network/INetworkMaster.java @@ -254,7 +254,7 @@ public interface INetworkMaster { * @param size the amount of that prototype that has to be extracted * @return null if we didn't extract anything, or a stack with the result */ - default ItemStack extractItem(ItemStack stack, int size) { + default ItemStack extractItem(@Nonnull ItemStack stack, int size) { return extractItem(stack, size, IComparer.COMPARE_DAMAGE | IComparer.COMPARE_NBT); } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/container/ContainerCraftingMonitor.java b/src/main/java/com/raoulvdberge/refinedstorage/container/ContainerCraftingMonitor.java index b95cdd25b..453184815 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/container/ContainerCraftingMonitor.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/container/ContainerCraftingMonitor.java @@ -1,13 +1,14 @@ package com.raoulvdberge.refinedstorage.container; import com.raoulvdberge.refinedstorage.tile.craftingmonitor.ICraftingMonitor; +import com.raoulvdberge.refinedstorage.tile.craftingmonitor.TileCraftingMonitor; import net.minecraft.entity.player.EntityPlayer; public class ContainerCraftingMonitor extends ContainerBase { private ICraftingMonitor craftingMonitor; public ContainerCraftingMonitor(ICraftingMonitor craftingMonitor, EntityPlayer player) { - super(null, player); + super(craftingMonitor instanceof TileCraftingMonitor ? (TileCraftingMonitor) craftingMonitor : null, player); this.craftingMonitor = craftingMonitor; diff --git a/src/main/java/com/raoulvdberge/refinedstorage/gui/GuiCraftingMonitor.java b/src/main/java/com/raoulvdberge/refinedstorage/gui/GuiCraftingMonitor.java index 08b64e9d2..0380f1fb8 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/gui/GuiCraftingMonitor.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/gui/GuiCraftingMonitor.java @@ -7,7 +7,9 @@ import com.raoulvdberge.refinedstorage.api.render.IElementDrawers; import com.raoulvdberge.refinedstorage.container.ContainerCraftingMonitor; import com.raoulvdberge.refinedstorage.gui.sidebutton.SideButtonRedstoneMode; import com.raoulvdberge.refinedstorage.network.MessageCraftingMonitorCancel; +import com.raoulvdberge.refinedstorage.tile.craftingmonitor.ICraftingMonitor; import com.raoulvdberge.refinedstorage.tile.craftingmonitor.TileCraftingMonitor; +import com.raoulvdberge.refinedstorage.tile.craftingmonitor.WirelessCraftingMonitor; import net.minecraft.client.gui.GuiButton; import net.minecraft.client.renderer.GlStateManager; import net.minecraft.client.renderer.RenderHelper; @@ -41,6 +43,8 @@ public class GuiCraftingMonitor extends GuiBase { private GuiButton cancelButton; private GuiButton cancelAllButton; + private ICraftingMonitor craftingMonitor; + private IElementDrawers drawers = new CraftingMonitorElementDrawers(); private int itemSelected = -1; @@ -48,15 +52,22 @@ public class GuiCraftingMonitor extends GuiBase { private int itemSelectedX = -1; private int itemSelectedY = -1; - public GuiCraftingMonitor(ContainerCraftingMonitor container) { + public GuiCraftingMonitor(ContainerCraftingMonitor container, ICraftingMonitor craftingMonitor) { super(container, 176, 230); + this.craftingMonitor = craftingMonitor; this.scrollbar = new Scrollbar(157, 20, 12, 89); } + public List getElements() { + return craftingMonitor.isConnected() ? ELEMENTS : Collections.emptyList(); + } + @Override public void init(int x, int y) { - addSideButton(new SideButtonRedstoneMode(this, TileCraftingMonitor.REDSTONE_MODE)); + if (!(craftingMonitor instanceof WirelessCraftingMonitor)) { + addSideButton(new SideButtonRedstoneMode(this, TileCraftingMonitor.REDSTONE_MODE)); + } String cancel = t("gui.cancel"); String cancelAll = t("misc.refinedstorage:cancel_all"); @@ -73,12 +84,12 @@ public class GuiCraftingMonitor extends GuiBase { scrollbar.setEnabled(getRows() > VISIBLE_ROWS); scrollbar.setMaxOffset(getRows() - VISIBLE_ROWS); - if (itemSelected >= ELEMENTS.size()) { + if (itemSelected >= getElements().size()) { itemSelected = -1; } - cancelButton.enabled = itemSelected != -1 && ELEMENTS.get(itemSelected).getTaskId() != -1; - cancelAllButton.enabled = ELEMENTS.size() > 0; + cancelButton.enabled = itemSelected != -1 && getElements().get(itemSelected).getTaskId() != -1; + cancelAllButton.enabled = getElements().size() > 0; } @Override @@ -90,8 +101,8 @@ public class GuiCraftingMonitor extends GuiBase { if (itemSelectedX != -1 && itemSelectedY != -1 && itemSelected >= 0 && - itemSelected < ELEMENTS.size() && - ELEMENTS.get(itemSelected).canDrawSelection()) { + itemSelected < getElements().size() && + getElements().get(itemSelected).canDrawSelection()) { drawTexture(x + itemSelectedX, y + itemSelectedY, 0, 232, ITEM_WIDTH, ITEM_HEIGHT); } } @@ -114,8 +125,8 @@ public class GuiCraftingMonitor extends GuiBase { String itemSelectedTooltip = null; for (int i = 0; i < VISIBLE_ROWS; ++i) { - if (item < ELEMENTS.size()) { - ICraftingMonitorElement element = ELEMENTS.get(item); + if (item < getElements().size()) { + ICraftingMonitorElement element = getElements().get(item); if (item == itemSelected) { itemSelectedX = x; @@ -141,7 +152,7 @@ public class GuiCraftingMonitor extends GuiBase { } private int getRows() { - return ELEMENTS.size(); + return getElements().size(); } @Override @@ -149,12 +160,12 @@ public class GuiCraftingMonitor extends GuiBase { super.actionPerformed(button); if (button == cancelButton && itemSelected != -1) { - ICraftingMonitorElement element = ELEMENTS.get(itemSelected); + ICraftingMonitorElement element = getElements().get(itemSelected); if (element.getTaskId() != -1) { RS.INSTANCE.network.sendToServer(new MessageCraftingMonitorCancel(element.getTaskId())); } - } else if (button == cancelAllButton && ELEMENTS.size() > 0) { + } else if (button == cancelAllButton && getElements().size() > 0) { RS.INSTANCE.network.sendToServer(new MessageCraftingMonitorCancel(-1)); } } @@ -172,7 +183,7 @@ public class GuiCraftingMonitor extends GuiBase { int ix = 8; int iy = 20 + (i * ITEM_HEIGHT); - if (inBounds(ix, iy, ITEM_WIDTH, ITEM_HEIGHT, mouseX - guiLeft, mouseY - guiTop) && (item + i) < ELEMENTS.size()) { + if (inBounds(ix, iy, ITEM_WIDTH, ITEM_HEIGHT, mouseX - guiLeft, mouseY - guiTop) && (item + i) < getElements().size()) { itemSelected = item + i; } } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/gui/GuiHandler.java b/src/main/java/com/raoulvdberge/refinedstorage/gui/GuiHandler.java index 238e60422..a34daf11f 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/gui/GuiHandler.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/gui/GuiHandler.java @@ -114,7 +114,7 @@ public class GuiHandler implements IGuiHandler { case RSGui.INTERFACE: return new GuiInterface((ContainerInterface) getContainer(ID, player, tile)); case RSGui.CRAFTING_MONITOR: - return new GuiCraftingMonitor((ContainerCraftingMonitor) getContainer(ID, player, tile)); + return new GuiCraftingMonitor((ContainerCraftingMonitor) getContainer(ID, player, tile), (TileCraftingMonitor) tile); case RSGui.WIRELESS_TRANSMITTER: return new GuiWirelessTransmitter((ContainerWirelessTransmitter) getContainer(ID, player, tile)); case RSGui.CRAFTER: @@ -159,7 +159,7 @@ public class GuiHandler implements IGuiHandler { private GuiCraftingMonitor getWirelessCraftingMonitorGui(EntityPlayer player, int hand, int controllerDimension) { WirelessCraftingMonitor craftingMonitor = getWirelessCraftingMonitor(player, hand, controllerDimension); - return new GuiCraftingMonitor(new ContainerCraftingMonitor(craftingMonitor, player)); + return new GuiCraftingMonitor(new ContainerCraftingMonitor(craftingMonitor, player), craftingMonitor); } private ContainerCraftingMonitor getWirelessCraftingMonitorContainer(EntityPlayer player, int hand, int controllerDimension) { diff --git a/src/main/java/com/raoulvdberge/refinedstorage/tile/TileController.java b/src/main/java/com/raoulvdberge/refinedstorage/tile/TileController.java index ed8966ace..8bb7731b3 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/tile/TileController.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/tile/TileController.java @@ -322,29 +322,6 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR super.update(); } - @Override - public void markCraftingMonitorForUpdate() { - craftingMonitorUpdateRequested = true; - } - - @Override - public void sendCraftingMonitorUpdate() { - List elements = getElements(); - - worldObj.getMinecraftServer().getPlayerList().getPlayerList().stream() - .filter(player -> player.openContainer instanceof ContainerCraftingMonitor) - .forEach(player -> RS.INSTANCE.network.sendTo(new MessageCraftingMonitorElements(elements), player)); - } - - @Override - public void sendCraftingMonitorUpdate(EntityPlayerMP player) { - RS.INSTANCE.network.sendTo(new MessageCraftingMonitorElements(getElements()), player); - } - - private List getElements() { - return craftingTasks.stream().flatMap(t -> t.getCraftingMonitorElements().stream()).collect(Collectors.toList()); - } - @Override public void invalidate() { super.invalidate(); @@ -551,7 +528,30 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR } @Override - public ItemStack insertItem(ItemStack stack, int size, boolean simulate) { + public void markCraftingMonitorForUpdate() { + craftingMonitorUpdateRequested = true; + } + + @Override + public void sendCraftingMonitorUpdate() { + List elements = getElements(); + + worldObj.getMinecraftServer().getPlayerList().getPlayerList().stream() + .filter(player -> player.openContainer instanceof ContainerCraftingMonitor && pos.equals(((ContainerCraftingMonitor) player.openContainer).getCraftingMonitor().getNetworkPosition())) + .forEach(player -> RS.INSTANCE.network.sendTo(new MessageCraftingMonitorElements(elements), player)); + } + + @Override + public void sendCraftingMonitorUpdate(EntityPlayerMP player) { + RS.INSTANCE.network.sendTo(new MessageCraftingMonitorElements(getElements()), player); + } + + private List getElements() { + return craftingTasks.stream().flatMap(t -> t.getCraftingMonitorElements().stream()).collect(Collectors.toList()); + } + + @Override + public ItemStack insertItem(@Nonnull ItemStack stack, int size, boolean simulate) { if (stack == null || stack.getItem() == null || itemStorage.getStorages().isEmpty()) { return ItemHandlerHelper.copyStackWithSize(stack, size); } @@ -611,7 +611,7 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR } @Override - public ItemStack extractItem(ItemStack stack, int size, int flags) { + public ItemStack extractItem(@Nonnull ItemStack stack, int size, int flags) { int requested = size; int received = 0; ItemStack newStack = null; diff --git a/src/main/java/com/raoulvdberge/refinedstorage/tile/craftingmonitor/ICraftingMonitor.java b/src/main/java/com/raoulvdberge/refinedstorage/tile/craftingmonitor/ICraftingMonitor.java index 69082bd57..8c9e35f5c 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/tile/craftingmonitor/ICraftingMonitor.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/tile/craftingmonitor/ICraftingMonitor.java @@ -1,7 +1,12 @@ package com.raoulvdberge.refinedstorage.tile.craftingmonitor; import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.util.math.BlockPos; public interface ICraftingMonitor { void onCancelled(EntityPlayerMP player, int id); + + BlockPos getNetworkPosition(); + + boolean isConnected(); } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/tile/craftingmonitor/TileCraftingMonitor.java b/src/main/java/com/raoulvdberge/refinedstorage/tile/craftingmonitor/TileCraftingMonitor.java index 7252c690f..e60cbdbe1 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/tile/craftingmonitor/TileCraftingMonitor.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/tile/craftingmonitor/TileCraftingMonitor.java @@ -4,6 +4,7 @@ import com.raoulvdberge.refinedstorage.RS; import com.raoulvdberge.refinedstorage.tile.TileNode; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.util.math.BlockPos; public class TileCraftingMonitor extends TileNode implements ICraftingMonitor { @Override @@ -27,6 +28,11 @@ public class TileCraftingMonitor extends TileNode implements ICraftingMonitor { } } + @Override + public BlockPos getNetworkPosition() { + return network != null ? network.getPosition() : null; + } + public void onOpened(EntityPlayer player) { if (isConnected()) { network.sendCraftingMonitorUpdate((EntityPlayerMP) player); diff --git a/src/main/java/com/raoulvdberge/refinedstorage/tile/craftingmonitor/WirelessCraftingMonitor.java b/src/main/java/com/raoulvdberge/refinedstorage/tile/craftingmonitor/WirelessCraftingMonitor.java index da5958453..b2fe94b61 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/tile/craftingmonitor/WirelessCraftingMonitor.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/tile/craftingmonitor/WirelessCraftingMonitor.java @@ -27,6 +27,16 @@ public class WirelessCraftingMonitor implements ICraftingMonitor { } } + @Override + public BlockPos getNetworkPosition() { + return controller; + } + + @Override + public boolean isConnected() { + return true; + } + private TileController getController() { World world = DimensionManager.getWorld(controllerDimension);