diff --git a/CHANGELOG.md b/CHANGELOG.md index b6694859f..fa58c2b32 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,7 @@ - Fixed bug where pattern was recipe pattern was creatable when there was no recipe output (raoulvdberge) - If an Interface is configured to expose the entire network storage (by configuring no export slots), it will no longer expose the entire RS storage, due to performance issues (raoulvdberge) - The Portable Grid no longer exposes a inventory for crossmod interaction, due to performance issues (raoulvdberge) +- The Crafting Monitor is now resizable and its size can be configured (stretched, small, medium, large) (raoulvdberge) - Removed the Wrench (raoulvdberge) - Updated Russian translation (kellixon) diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeCrafterManager.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeCrafterManager.java index e06de9995..8324f64f4 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeCrafterManager.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeCrafterManager.java @@ -22,7 +22,7 @@ public class NetworkNodeCrafterManager extends NetworkNode { @Override public int getEnergyUsage() { - return 0; + return 0; // TODO: config } @Override diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeCraftingMonitor.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeCraftingMonitor.java index b3028e5a1..7a1f4f23b 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeCraftingMonitor.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeCraftingMonitor.java @@ -2,42 +2,46 @@ package com.raoulvdberge.refinedstorage.apiimpl.network.node; import com.raoulvdberge.refinedstorage.RS; import com.raoulvdberge.refinedstorage.api.autocrafting.task.ICraftingTask; -import com.raoulvdberge.refinedstorage.api.util.IFilter; -import com.raoulvdberge.refinedstorage.inventory.ItemHandlerFilter; -import com.raoulvdberge.refinedstorage.inventory.ItemHandlerListenerNetworkNode; +import com.raoulvdberge.refinedstorage.api.network.grid.IGrid; import com.raoulvdberge.refinedstorage.tile.craftingmonitor.ICraftingMonitor; import com.raoulvdberge.refinedstorage.tile.craftingmonitor.TileCraftingMonitor; +import com.raoulvdberge.refinedstorage.tile.data.TileDataManager; import com.raoulvdberge.refinedstorage.tile.data.TileDataParameter; -import com.raoulvdberge.refinedstorage.util.StackUtils; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; -import net.minecraftforge.items.IItemHandler; import javax.annotation.Nullable; -import java.util.ArrayList; import java.util.Collections; import java.util.List; public class NetworkNodeCraftingMonitor extends NetworkNode implements ICraftingMonitor { public static final String ID = "crafting_monitor"; - private List filters = new ArrayList<>(); - private ItemHandlerListenerNetworkNode filterListener = new ItemHandlerListenerNetworkNode(this); - private ItemHandlerFilter filter = new ItemHandlerFilter(filters, new ArrayList<>(), slot -> { - filterListener.accept(slot); + private static final String NBT_SIZE = "Size"; - if (network != null) { - network.getCraftingManager().sendCraftingMonitorUpdate(); - } - }); + private int size = IGrid.SIZE_STRETCH; public NetworkNodeCraftingMonitor(World world, BlockPos pos) { super(world, pos); } + @Override + public int getSize() { + return world.isRemote ? TileCraftingMonitor.SIZE.getValue() : size; + } + + @Override + public void onSizeChanged(int size) { + TileDataManager.setParameter(TileCraftingMonitor.SIZE, size); + } + + public void setSize(int size) { + this.size = size; + } + @Override public int getEnergyUsage() { return RS.INSTANCE.config.craftingMonitorUsage; @@ -81,11 +85,6 @@ public class NetworkNodeCraftingMonitor extends NetworkNode implements ICrafting return network != null ? network.getCraftingManager().getTasks() : Collections.emptyList(); } - @Override - public List getFilters() { - return filters; - } - public void onOpened(EntityPlayer player) { if (network != null) { network.getCraftingManager().sendCraftingMonitorUpdate((EntityPlayerMP) player); @@ -93,32 +92,25 @@ public class NetworkNodeCraftingMonitor extends NetworkNode implements ICrafting } @Override - public NBTTagCompound write(NBTTagCompound tag) { - super.write(tag); + public NBTTagCompound writeConfiguration(NBTTagCompound tag) { + super.writeConfiguration(tag); - StackUtils.writeItems(filter, 0, tag); + tag.setInteger(NBT_SIZE, size); return tag; } @Override - public void read(NBTTagCompound tag) { - super.read(tag); + public void readConfiguration(NBTTagCompound tag) { + super.readConfiguration(tag); - StackUtils.readItems(filter, 0, tag); + if (tag.hasKey(NBT_SIZE)) { + size = tag.getInteger(NBT_SIZE); + } } @Override public void onClosed(EntityPlayer player) { // NO OP } - - public ItemHandlerFilter getFilter() { - return filter; - } - - @Override - public IItemHandler getDrops() { - return filter; - } } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/container/ContainerCraftingMonitor.java b/src/main/java/com/raoulvdberge/refinedstorage/container/ContainerCraftingMonitor.java index 9eb40bada..b0b65dc81 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/container/ContainerCraftingMonitor.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/container/ContainerCraftingMonitor.java @@ -1,28 +1,33 @@ package com.raoulvdberge.refinedstorage.container; +import com.raoulvdberge.refinedstorage.gui.IResizableDisplay; import com.raoulvdberge.refinedstorage.tile.craftingmonitor.ICraftingMonitor; import com.raoulvdberge.refinedstorage.tile.craftingmonitor.TileCraftingMonitor; import com.raoulvdberge.refinedstorage.tile.craftingmonitor.WirelessCraftingMonitor; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Slot; import net.minecraft.item.ItemStack; -import net.minecraftforge.items.SlotItemHandler; import javax.annotation.Nullable; public class ContainerCraftingMonitor extends ContainerBase { private ICraftingMonitor craftingMonitor; + private IResizableDisplay resizableDisplay; - public ContainerCraftingMonitor(ICraftingMonitor craftingMonitor, @Nullable TileCraftingMonitor craftingMonitorTile, EntityPlayer player) { + public ContainerCraftingMonitor(ICraftingMonitor craftingMonitor, @Nullable TileCraftingMonitor craftingMonitorTile, EntityPlayer player, IResizableDisplay resizableDisplay) { super(craftingMonitorTile, player); this.craftingMonitor = craftingMonitor; + this.resizableDisplay = resizableDisplay; - for (int i = 0; i < 4; ++i) { - addSlotToContainer(new SlotItemHandler(craftingMonitor.getFilter(), i, 187, 6 + (18 * i))); - } + initSlots(); + } - addPlayerInventory(8, 148); + public void initSlots() { + this.inventorySlots.clear(); + this.inventoryItemStacks.clear(); + + addPlayerInventory(8, resizableDisplay.getYPlayerInventory()); } @Override diff --git a/src/main/java/com/raoulvdberge/refinedstorage/gui/GuiCraftingMonitor.java b/src/main/java/com/raoulvdberge/refinedstorage/gui/GuiCraftingMonitor.java index 115b9bcba..b2d66c04d 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/gui/GuiCraftingMonitor.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/gui/GuiCraftingMonitor.java @@ -2,10 +2,12 @@ package com.raoulvdberge.refinedstorage.gui; import com.raoulvdberge.refinedstorage.RS; import com.raoulvdberge.refinedstorage.api.autocrafting.craftingmonitor.ICraftingMonitorElement; +import com.raoulvdberge.refinedstorage.api.network.grid.IGrid; import com.raoulvdberge.refinedstorage.api.render.IElementDrawer; import com.raoulvdberge.refinedstorage.api.render.IElementDrawers; import com.raoulvdberge.refinedstorage.container.ContainerCraftingMonitor; import com.raoulvdberge.refinedstorage.gui.control.Scrollbar; +import com.raoulvdberge.refinedstorage.gui.control.SideButtonGridSize; import com.raoulvdberge.refinedstorage.gui.control.SideButtonRedstoneMode; import com.raoulvdberge.refinedstorage.network.MessageCraftingMonitorCancel; import com.raoulvdberge.refinedstorage.tile.craftingmonitor.ICraftingMonitor; @@ -18,7 +20,7 @@ import java.io.IOException; import java.util.Collections; import java.util.List; -public class GuiCraftingMonitor extends GuiBase { +public class GuiCraftingMonitor extends GuiBase implements IResizableDisplay { public class CraftingMonitorElementDrawers extends ElementDrawers { private IElementDrawer overlayDrawer = (x, y, color) -> { GlStateManager.color(1, 1, 1, 1); @@ -50,10 +52,9 @@ public class GuiCraftingMonitor extends GuiBase { private int itemSelectedY = -1; public GuiCraftingMonitor(ContainerCraftingMonitor container, ICraftingMonitor craftingMonitor) { - super(container, 210, 230); + super(container, 176, 230); this.craftingMonitor = craftingMonitor; - this.scrollbar = new Scrollbar(157, 20, 12, 89); } public void setElements(List elements) { @@ -66,26 +67,38 @@ public class GuiCraftingMonitor extends GuiBase { @Override public void init(int x, int y) { + ((ContainerCraftingMonitor) this.inventorySlots).initSlots(); + + this.scrollbar = new Scrollbar(157, getTopHeight(), 12, (getVisibleRows() * 18) - 1); + if (craftingMonitor.getRedstoneModeParameter() != null) { addSideButton(new SideButtonRedstoneMode(this, craftingMonitor.getRedstoneModeParameter())); } + addSideButton(new SideButtonGridSize(this, () -> craftingMonitor.getSize(), size -> craftingMonitor.onSizeChanged(size))); + String cancel = t("gui.cancel"); String cancelAll = t("misc.refinedstorage:cancel_all"); int cancelButtonWidth = 14 + fontRenderer.getStringWidth(cancel); int cancelAllButtonWidth = 14 + fontRenderer.getStringWidth(cancelAll); - cancelButton = addButton(x + 7, y + 113, cancelButtonWidth, 20, cancel, false, true); - cancelAllButton = addButton(x + 7 + cancelButtonWidth + 4, y + 113, cancelAllButtonWidth, 20, cancelAll, false, true); + int by = y + getTopHeight() + (getVisibleRows() * 18) + 3; + + this.cancelButton = addButton(x + 7, by, cancelButtonWidth, 20, cancel, false, true); + this.cancelAllButton = addButton(x + 7 + cancelButtonWidth + 4, by, cancelAllButtonWidth, 20, cancelAll, false, true); + } + + private void updateScrollbar() { + if (scrollbar != null) { + scrollbar.setEnabled(getRows() > getVisibleRows()); + scrollbar.setMaxOffset(getRows() - getVisibleRows()); + } } @Override public void update(int x, int y) { - if (scrollbar != null) { - scrollbar.setEnabled(getRows() > VISIBLE_ROWS); - scrollbar.setMaxOffset(getRows() - VISIBLE_ROWS); - } + updateScrollbar(); if (itemSelected >= getElements().size()) { itemSelected = -1; @@ -100,25 +113,41 @@ public class GuiCraftingMonitor extends GuiBase { } } + @Override + protected void calcHeight() { + this.ySize = getTopHeight() + getBottomHeight() + (getVisibleRows() * 18); + this.screenHeight = ySize; + } + @Override public void drawBackground(int x, int y, int mouseX, int mouseY) { bindTexture("gui/crafting_monitor.png"); - drawTexture(x, y, 0, 0, screenWidth, screenHeight); + int yy = y; - 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); + drawTexture(x, yy, 0, 0, screenWidth, getTopHeight()); + + yy += getTopHeight(); + + int rows = getVisibleRows(); + + for (int i = 0; i < rows; ++i) { + drawTexture(x, yy, 0, getTopHeight() + (i > 0 ? (i == rows - 1 ? 18 * 2 : 18) : 0), screenWidth, 18); + + yy += 18; + } + + 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 public void drawForeground(int mouseX, int mouseY) { drawString(7, 7, t(craftingMonitor.getGuiTitle())); - drawString(7, 137, t("container.inventory")); + drawString(7, getYPlayerInventory() - 12, t("container.inventory")); int item = scrollbar != null ? scrollbar.getOffset() : 0; @@ -127,17 +156,17 @@ public class GuiCraftingMonitor extends GuiBase { int x = 8; int y = 20; - itemSelectedX = -1; - itemSelectedY = -1; + this.itemSelectedX = -1; + this.itemSelectedY = -1; String itemSelectedTooltip = null; - for (int i = 0; i < VISIBLE_ROWS; ++i) { + for (int i = scrollbar.getOffset(); i < scrollbar.getOffset() + getVisibleRows(); ++i) { if (item < getElements().size()) { ICraftingMonitorElement element = getElements().get(item); if (item == itemSelected) { - itemSelectedX = x; - itemSelectedY = y; + this.itemSelectedX = x; + this.itemSelectedY = y; } if (inBounds(x, y, ITEM_WIDTH, ITEM_HEIGHT, mouseX, mouseY)) { @@ -157,10 +186,54 @@ public class GuiCraftingMonitor extends GuiBase { } } - private int getRows() { + @Override + public int getVisibleRows() { + switch (craftingMonitor.getSize()) { + case IGrid.SIZE_STRETCH: + int screenSpaceAvailable = height - getTopHeight() - getBottomHeight(); + + return Math.max(3, Math.min((screenSpaceAvailable / 18) - 3, RS.INSTANCE.config.maxRowsStretch)); + case IGrid.SIZE_SMALL: + return 3; + case IGrid.SIZE_MEDIUM: + return 5; + case IGrid.SIZE_LARGE: + return 8; + default: + return 3; + } + } + + @Override + public int getRows() { return getElements().size(); } + @Override + public int getCurrentOffset() { + return scrollbar.getOffset(); + } + + @Override + public String getSearchFieldText() { + return null; + } + + @Override + public int getTopHeight() { + return 20; + } + + @Override + public int getBottomHeight() { + return 120; + } + + @Override + public int getYPlayerInventory() { + return getTopHeight() + (18 * getVisibleRows()) + 38; + } + @Override protected void actionPerformed(GuiButton button) throws IOException { super.actionPerformed(button); @@ -180,17 +253,17 @@ public class GuiCraftingMonitor extends GuiBase { protected void mouseClicked(int mouseX, int mouseY, int mouseButton) throws IOException { super.mouseClicked(mouseX, mouseY, mouseButton); - itemSelected = -1; + this.itemSelected = -1; - if (mouseButton == 0 && inBounds(8, 20, 144, 90, mouseX - guiLeft, mouseY - guiTop)) { + if (mouseButton == 0) { int item = scrollbar != null ? scrollbar.getOffset() : 0; - for (int i = 0; i < VISIBLE_ROWS; ++i) { + for (int i = 0; i < getVisibleRows(); ++i) { int ix = 8; int iy = 20 + (i * ITEM_HEIGHT); if (inBounds(ix, iy, ITEM_WIDTH, ITEM_HEIGHT, mouseX - guiLeft, mouseY - guiTop) && (item + i) < getElements().size()) { - itemSelected = item + i; + this.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 eeeb924cb..964761ec4 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/gui/GuiHandler.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/gui/GuiHandler.java @@ -4,6 +4,7 @@ import com.raoulvdberge.refinedstorage.RSGui; import com.raoulvdberge.refinedstorage.api.network.grid.IGrid; import com.raoulvdberge.refinedstorage.apiimpl.API; import com.raoulvdberge.refinedstorage.apiimpl.network.node.IGuiReaderWriter; +import com.raoulvdberge.refinedstorage.apiimpl.network.node.NetworkNodeCraftingMonitor; import com.raoulvdberge.refinedstorage.container.*; import com.raoulvdberge.refinedstorage.gui.grid.GuiGrid; import com.raoulvdberge.refinedstorage.tile.*; @@ -51,7 +52,7 @@ public class GuiHandler implements IGuiHandler { case RSGui.INTERFACE: return new ContainerInterface((TileInterface) tile, player); case RSGui.CRAFTING_MONITOR: - return new ContainerCraftingMonitor(((TileCraftingMonitor) tile).getNode(), (TileCraftingMonitor) tile, player); + return new ContainerCraftingMonitor(((TileCraftingMonitor) tile).getNode(), (TileCraftingMonitor) tile, player, new ResizableDisplayDummy()); case RSGui.WIRELESS_TRANSMITTER: return new ContainerWirelessTransmitter((TileWirelessTransmitter) tile, player); case RSGui.CRAFTER: @@ -98,11 +99,12 @@ public class GuiHandler implements IGuiHandler { case RSGui.CONTROLLER: return new GuiController((ContainerController) getContainer(ID, player, tile), (TileController) tile); case RSGui.GRID: - case RSGui.PORTABLE_GRID: + case RSGui.PORTABLE_GRID: { IGrid grid = ID == RSGui.GRID ? ((TileGrid) tile).getNode() : (TilePortableGrid) tile; GuiGrid gui = new GuiGrid(null, grid); gui.inventorySlots = new ContainerGrid(grid, gui, null, player); return gui; + } case RSGui.WIRELESS_GRID: return getGridGui(player, x, y, z); case RSGui.DISK_DRIVE: @@ -127,8 +129,12 @@ public class GuiHandler implements IGuiHandler { return new GuiRelay((ContainerRelay) getContainer(ID, player, tile)); case RSGui.INTERFACE: return new GuiInterface((ContainerInterface) getContainer(ID, player, tile)); - case RSGui.CRAFTING_MONITOR: - return new GuiCraftingMonitor((ContainerCraftingMonitor) getContainer(ID, player, tile), ((TileCraftingMonitor) tile).getNode()); + case RSGui.CRAFTING_MONITOR: { + NetworkNodeCraftingMonitor node = ((TileCraftingMonitor) tile).getNode(); + GuiCraftingMonitor gui = new GuiCraftingMonitor(null, node); + gui.inventorySlots = new ContainerCraftingMonitor(node, (TileCraftingMonitor) tile, player, gui); + return gui; + } case RSGui.WIRELESS_TRANSMITTER: return new GuiWirelessTransmitter((ContainerWirelessTransmitter) getContainer(ID, player, tile)); case RSGui.CRAFTER: @@ -183,11 +189,13 @@ public class GuiHandler implements IGuiHandler { private GuiCraftingMonitor getCraftingMonitorGui(EntityPlayer player, int hand, int networkDimension) { WirelessCraftingMonitor craftingMonitor = getCraftingMonitor(player, hand, networkDimension); - return new GuiCraftingMonitor(new ContainerCraftingMonitor(craftingMonitor, null, player), craftingMonitor); + GuiCraftingMonitor gui = new GuiCraftingMonitor(null, craftingMonitor); + gui.inventorySlots = new ContainerCraftingMonitor(craftingMonitor, null, player, gui); + return gui; } private ContainerCraftingMonitor getCraftingMonitorContainer(EntityPlayer player, int hand, int networkDimension) { - return new ContainerCraftingMonitor(getCraftingMonitor(player, hand, networkDimension), null, player); + return new ContainerCraftingMonitor(getCraftingMonitor(player, hand, networkDimension), null, player, new ResizableDisplayDummy()); } private ContainerFilter getFilterContainer(EntityPlayer player, int hand) { diff --git a/src/main/java/com/raoulvdberge/refinedstorage/gui/grid/GuiGrid.java b/src/main/java/com/raoulvdberge/refinedstorage/gui/grid/GuiGrid.java index c7722f384..a48afe5ad 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/gui/grid/GuiGrid.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/gui/grid/GuiGrid.java @@ -751,12 +751,4 @@ public class GuiGrid extends GuiBase implements IResizableDisplay { tabPageRight.visible = grid.getTotalTabPages() > 0; } } - - public GuiButton getTabPageLeft() { - return tabPageLeft; - } - - public GuiButton getTabPageRight() { - return tabPageRight; - } } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/item/ItemWirelessCraftingMonitor.java b/src/main/java/com/raoulvdberge/refinedstorage/item/ItemWirelessCraftingMonitor.java index eef547a08..688c9cd9a 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/item/ItemWirelessCraftingMonitor.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/item/ItemWirelessCraftingMonitor.java @@ -1,14 +1,18 @@ package com.raoulvdberge.refinedstorage.item; +import com.raoulvdberge.refinedstorage.api.network.grid.IGrid; import com.raoulvdberge.refinedstorage.api.network.item.INetworkItem; import com.raoulvdberge.refinedstorage.api.network.item.INetworkItemHandler; import com.raoulvdberge.refinedstorage.apiimpl.network.item.NetworkItemWirelessCraftingMonitor; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; import javax.annotation.Nonnull; public class ItemWirelessCraftingMonitor extends ItemNetworkItem { + public static final String NBT_SIZE = "Size"; + public ItemWirelessCraftingMonitor() { super("wireless_crafting_monitor"); } @@ -18,4 +22,20 @@ public class ItemWirelessCraftingMonitor extends ItemNetworkItem { public INetworkItem provide(INetworkItemHandler handler, EntityPlayer player, ItemStack stack) { return new NetworkItemWirelessCraftingMonitor(handler, player, stack); } + + public static int getSize(ItemStack stack) { + if (stack.hasTagCompound() && stack.getTagCompound().hasKey(NBT_SIZE)) { + return stack.getTagCompound().getInteger(NBT_SIZE); + } + + return IGrid.SIZE_STRETCH; + } + + public static void setSize(ItemStack stack, int size) { + if (!stack.hasTagCompound()) { + stack.setTagCompound(new NBTTagCompound()); + } + + stack.getTagCompound().setInteger(NBT_SIZE, size); + } } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/network/MessageCraftingMonitorElements.java b/src/main/java/com/raoulvdberge/refinedstorage/network/MessageCraftingMonitorElements.java index 845370e12..943b6071d 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/network/MessageCraftingMonitorElements.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/network/MessageCraftingMonitorElements.java @@ -5,17 +5,15 @@ import com.raoulvdberge.refinedstorage.api.autocrafting.task.ICraftingTask; import com.raoulvdberge.refinedstorage.apiimpl.API; import com.raoulvdberge.refinedstorage.gui.GuiBase; import com.raoulvdberge.refinedstorage.gui.GuiCraftingMonitor; -import com.raoulvdberge.refinedstorage.gui.grid.filtering.GridFilterFilter; import com.raoulvdberge.refinedstorage.tile.craftingmonitor.ICraftingMonitor; import io.netty.buffer.ByteBuf; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; import net.minecraftforge.fml.common.network.ByteBufUtils; import net.minecraftforge.fml.common.network.simpleimpl.IMessage; import net.minecraftforge.fml.common.network.simpleimpl.IMessageHandler; import net.minecraftforge.fml.common.network.simpleimpl.MessageContext; import java.util.ArrayList; +import java.util.LinkedList; import java.util.List; import java.util.function.Function; @@ -46,22 +44,18 @@ public class MessageCraftingMonitorElements implements IMessage, IMessageHandler @Override public void toBytes(ByteBuf buf) { - List elements = new ArrayList<>(); + List elements = new LinkedList<>(); for (ICraftingTask task : craftingMonitor.getTasks()) { - ItemStack stack = task.getRequested(); - - if (stack == null || GridFilterFilter.accepts(craftingMonitor.getFilters(), stack, Item.REGISTRY.getNameForObject(stack.getItem()).getResourceDomain())) { - elements.addAll(task.getCraftingMonitorElements()); - } + elements.addAll(task.getCraftingMonitorElements()); } buf.writeInt(elements.size()); - for (ICraftingMonitorElement task : elements) { - ByteBufUtils.writeUTF8String(buf, task.getId()); + for (ICraftingMonitorElement element : elements) { + ByteBufUtils.writeUTF8String(buf, element.getId()); - task.write(buf); + element.write(buf); } } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/network/MessageWirelessCraftingMonitorSize.java b/src/main/java/com/raoulvdberge/refinedstorage/network/MessageWirelessCraftingMonitorSize.java new file mode 100644 index 000000000..72c0c8e58 --- /dev/null +++ b/src/main/java/com/raoulvdberge/refinedstorage/network/MessageWirelessCraftingMonitorSize.java @@ -0,0 +1,37 @@ +package com.raoulvdberge.refinedstorage.network; + +import com.raoulvdberge.refinedstorage.api.network.grid.IGrid; +import com.raoulvdberge.refinedstorage.container.ContainerCraftingMonitor; +import com.raoulvdberge.refinedstorage.item.ItemWirelessCraftingMonitor; +import com.raoulvdberge.refinedstorage.tile.craftingmonitor.WirelessCraftingMonitor; +import io.netty.buffer.ByteBuf; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraftforge.fml.common.network.simpleimpl.IMessage; + +public class MessageWirelessCraftingMonitorSize extends MessageHandlerPlayerToServer implements IMessage { + private int size; + + public MessageWirelessCraftingMonitorSize() { + } + + public MessageWirelessCraftingMonitorSize(int size) { + this.size = size; + } + + @Override + public void fromBytes(ByteBuf buf) { + size = buf.readInt(); + } + + @Override + public void toBytes(ByteBuf buf) { + buf.writeInt(size); + } + + @Override + public void handle(MessageWirelessCraftingMonitorSize message, EntityPlayerMP player) { + if (player.openContainer instanceof ContainerCraftingMonitor && IGrid.isValidSize(message.size)) { + ItemWirelessCraftingMonitor.setSize(((WirelessCraftingMonitor) ((ContainerCraftingMonitor) player.openContainer).getCraftingMonitor()).getStack(), message.size); + } + } +} diff --git a/src/main/java/com/raoulvdberge/refinedstorage/proxy/ProxyCommon.java b/src/main/java/com/raoulvdberge/refinedstorage/proxy/ProxyCommon.java index 61b9183e7..6e977379f 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/proxy/ProxyCommon.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/proxy/ProxyCommon.java @@ -139,6 +139,7 @@ public class ProxyCommon { RS.INSTANCE.network.registerMessage(MessageWirelessFluidGridSettingsUpdate.class, MessageWirelessFluidGridSettingsUpdate.class, id++, Side.SERVER); RS.INSTANCE.network.registerMessage(MessageCrafterManagerSlotSizes.class, MessageCrafterManagerSlotSizes.class, id++, Side.CLIENT); RS.INSTANCE.network.registerMessage(MessageCrafterManagerRequestSlotData.class, MessageCrafterManagerRequestSlotData.class, id++, Side.SERVER); + RS.INSTANCE.network.registerMessage(MessageWirelessCraftingMonitorSize.class, MessageWirelessCraftingMonitorSize.class, id++, Side.SERVER); NetworkRegistry.INSTANCE.registerGuiHandler(RS.INSTANCE, new GuiHandler()); 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 077a07666..387038f89 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/tile/craftingmonitor/ICraftingMonitor.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/tile/craftingmonitor/ICraftingMonitor.java @@ -1,8 +1,6 @@ package com.raoulvdberge.refinedstorage.tile.craftingmonitor; import com.raoulvdberge.refinedstorage.api.autocrafting.task.ICraftingTask; -import com.raoulvdberge.refinedstorage.api.util.IFilter; -import com.raoulvdberge.refinedstorage.inventory.ItemHandlerBase; import com.raoulvdberge.refinedstorage.tile.data.TileDataParameter; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; @@ -23,9 +21,9 @@ public interface ICraftingMonitor { List getTasks(); - List getFilters(); + int getSize(); - ItemHandlerBase getFilter(); + void onSizeChanged(int size); boolean isActive(); 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 427c7fd6b..b00d54ecf 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/tile/craftingmonitor/TileCraftingMonitor.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/tile/craftingmonitor/TileCraftingMonitor.java @@ -1,13 +1,29 @@ package com.raoulvdberge.refinedstorage.tile.craftingmonitor; +import com.raoulvdberge.refinedstorage.api.network.grid.IGrid; import com.raoulvdberge.refinedstorage.apiimpl.network.node.NetworkNodeCraftingMonitor; +import com.raoulvdberge.refinedstorage.gui.GuiBase; +import com.raoulvdberge.refinedstorage.gui.GuiCraftingMonitor; import com.raoulvdberge.refinedstorage.tile.TileNode; +import com.raoulvdberge.refinedstorage.tile.data.TileDataParameter; +import net.minecraft.network.datasync.DataSerializers; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; import javax.annotation.Nonnull; public class TileCraftingMonitor extends TileNode { + public static final TileDataParameter SIZE = new TileDataParameter<>(DataSerializers.VARINT, IGrid.SIZE_STRETCH, t -> t.getNode().getSize(), (t, v) -> { + if (IGrid.isValidSize(v)) { + t.getNode().setSize(v); + t.getNode().markDirty(); + } + }, (initial, p) -> GuiBase.executeLater(GuiCraftingMonitor.class, GuiBase::initGui)); + + public TileCraftingMonitor() { + dataManager.addWatchedParameter(SIZE); + } + @Override @Nonnull public NetworkNodeCraftingMonitor createNode(World world, BlockPos pos) { 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 884a2a9cb..3bc49b35b 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/tile/craftingmonitor/WirelessCraftingMonitor.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/tile/craftingmonitor/WirelessCraftingMonitor.java @@ -1,23 +1,21 @@ package com.raoulvdberge.refinedstorage.tile.craftingmonitor; +import com.raoulvdberge.refinedstorage.RS; import com.raoulvdberge.refinedstorage.api.autocrafting.task.ICraftingTask; import com.raoulvdberge.refinedstorage.api.network.INetwork; -import com.raoulvdberge.refinedstorage.api.util.IFilter; -import com.raoulvdberge.refinedstorage.inventory.ItemHandlerBase; -import com.raoulvdberge.refinedstorage.inventory.ItemHandlerFilter; +import com.raoulvdberge.refinedstorage.gui.GuiBase; +import com.raoulvdberge.refinedstorage.gui.GuiCraftingMonitor; import com.raoulvdberge.refinedstorage.item.ItemWirelessCraftingMonitor; +import com.raoulvdberge.refinedstorage.network.MessageWirelessCraftingMonitorSize; import com.raoulvdberge.refinedstorage.tile.data.TileDataParameter; -import com.raoulvdberge.refinedstorage.util.StackUtils; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; import net.minecraftforge.common.DimensionManager; -import java.util.ArrayList; import java.util.Collections; import java.util.List; @@ -26,35 +24,13 @@ public class WirelessCraftingMonitor implements ICraftingMonitor { private int networkDimension; private BlockPos network; - - private List filters = new ArrayList<>(); - private ItemHandlerFilter filter = new ItemHandlerFilter(filters, new ArrayList<>(), null) { - @Override - protected void onContentsChanged(int slot) { - super.onContentsChanged(slot); - - if (!stack.hasTagCompound()) { - stack.setTagCompound(new NBTTagCompound()); - } - - StackUtils.writeItems(this, 0, stack.getTagCompound()); - - INetwork network = getNetwork(); - - if (network != null) { - network.getCraftingManager().sendCraftingMonitorUpdate(); - } - } - }; + private int size; public WirelessCraftingMonitor(int networkDimension, ItemStack stack) { this.stack = stack; this.networkDimension = networkDimension; this.network = new BlockPos(ItemWirelessCraftingMonitor.getX(stack), ItemWirelessCraftingMonitor.getY(stack), ItemWirelessCraftingMonitor.getZ(stack)); - - if (stack.hasTagCompound()) { - StackUtils.readItems(filter, 0, stack.getTagCompound()); - } + this.size = ItemWirelessCraftingMonitor.getSize(stack); } @Override @@ -93,13 +69,17 @@ public class WirelessCraftingMonitor implements ICraftingMonitor { } @Override - public List getFilters() { - return filters; + public int getSize() { + return size; } @Override - public ItemHandlerBase getFilter() { - return filter; + public void onSizeChanged(int size) { + this.size = size; + + GuiBase.executeLater(GuiCraftingMonitor.class, GuiBase::initGui); + + RS.INSTANCE.network.sendToServer(new MessageWirelessCraftingMonitorSize(size)); } private INetwork getNetwork() { 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 bec45fdf9..4c4a2379f 100755 Binary files a/src/main/resources/assets/refinedstorage/textures/gui/crafting_monitor.png and b/src/main/resources/assets/refinedstorage/textures/gui/crafting_monitor.png differ