diff --git a/CHANGELOG.md b/CHANGELOG.md index c3ea9c467..fb7ac65f2 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,7 @@ ### 1.5.18 - Added Project E integration for the External Storage on the Transmutation Table (raoulvdberge) - Added Project E integration for the energy values of Solderer items (raoulvdberge) +- Added support for more than 4 grid tabs in the Grid by putting filters IN filters (raoulvdberge) - Fixed network not disconnecting when Controller is broken (raoulvdberge) - Fixed bug where when multiple Fortune Upgrades are inserted, it chooses the first Fortune Upgrade instead of the highest one (raoulvdberge) - Fixed some translations having too big "Craft" text (raoulvdberge) diff --git a/src/main/java/com/raoulvdberge/refinedstorage/api/network/grid/IGrid.java b/src/main/java/com/raoulvdberge/refinedstorage/api/network/grid/IGrid.java index 377618fc1..f9a01432f 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/api/network/grid/IGrid.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/api/network/grid/IGrid.java @@ -17,6 +17,8 @@ import java.util.List; * Represents a grid. */ public interface IGrid { + int TABS_PER_PAGE = 6; + int SORTING_DIRECTION_ASCENDING = 0; int SORTING_DIRECTION_DESCENDING = 1; @@ -96,6 +98,16 @@ public interface IGrid { */ int getTabSelected(); + /** + * @return the current page that the tab is on + */ + int getTabPage(); + + /** + * @return the total amount of tab pages + */ + int getTotalTabPages(); + /** * @return the size mode */ @@ -131,6 +143,11 @@ public interface IGrid { */ void onTabSelectionChanged(int tab); + /** + * @param page the new selected page + */ + void onTabPageChanged(int page); + /** * @return the filters */ diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeGrid.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeGrid.java index 349d225d5..849370634 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeGrid.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeGrid.java @@ -51,6 +51,7 @@ public class NetworkNodeGrid extends NetworkNode implements IGrid { public static final String NBT_SEARCH_BOX_MODE = "SearchBoxMode"; public static final String NBT_OREDICT_PATTERN = "OredictPattern"; public static final String NBT_TAB_SELECTED = "TabSelected"; + public static final String NBT_TAB_PAGE = "TabPage"; public static final String NBT_SIZE = "Size"; public static final String NBT_PROCESSING_PATTERN = "ProcessingPattern"; public static final String NBT_BLOCKING_PATTERN = "BlockingPattern"; @@ -90,6 +91,7 @@ public class NetworkNodeGrid extends NetworkNode implements IGrid { private int size = SIZE_STRETCH; private int tabSelected = -1; + private int tabPage = 0; private boolean oredictPattern = false; private boolean processingPattern = false; @@ -135,6 +137,10 @@ public class NetworkNodeGrid extends NetworkNode implements IGrid { this.tabSelected = tabSelected; } + public void setTabPage(int page) { + this.tabPage = page; + } + public void setSize(int size) { this.size = size; } @@ -522,6 +528,16 @@ public class NetworkNodeGrid extends NetworkNode implements IGrid { return world.isRemote ? TileGrid.TAB_SELECTED.getValue() : tabSelected; } + @Override + public int getTabPage() { + return world.isRemote ? TileGrid.TAB_PAGE.getValue() : Math.min(tabPage, getTotalTabPages()); + } + + @Override + public int getTotalTabPages() { + return (int) Math.floor((float) tabs.size() / (float) IGrid.TABS_PER_PAGE); + } + @Override public void onViewTypeChanged(int type) { TileDataManager.setParameter(TileGrid.VIEW_TYPE, type); @@ -552,6 +568,13 @@ public class NetworkNodeGrid extends NetworkNode implements IGrid { TileDataManager.setParameter(TileGrid.TAB_SELECTED, tab); } + @Override + public void onTabPageChanged(int page) { + if (page >= 0 && page <= getTotalTabPages()) { + TileDataManager.setParameter(TileGrid.TAB_PAGE, page); + } + } + @Override public boolean hasConnectivityState() { return true; @@ -569,6 +592,10 @@ public class NetworkNodeGrid extends NetworkNode implements IGrid { if (tag.hasKey(NBT_TAB_SELECTED)) { tabSelected = tag.getInteger(NBT_TAB_SELECTED); } + + if (tag.hasKey(NBT_TAB_PAGE)) { + tabPage = tag.getInteger(NBT_TAB_PAGE); + } } @Override @@ -586,6 +613,7 @@ public class NetworkNodeGrid extends NetworkNode implements IGrid { StackUtils.writeItems(matrixProcessing, 3, tag); tag.setInteger(NBT_TAB_SELECTED, tabSelected); + tag.setInteger(NBT_TAB_PAGE, tabPage); return tag; } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/gui/GuiBase.java b/src/main/java/com/raoulvdberge/refinedstorage/gui/GuiBase.java index 566ac6bbc..24ba9fce5 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/gui/GuiBase.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/gui/GuiBase.java @@ -197,10 +197,6 @@ public abstract class GuiBase extends GuiContainer { } } - public GuiButton addButton(int x, int y, int w, int h, String text) { - return addButton(x, y, w, h, text, true); - } - public GuiCheckBox addCheckBox(int x, int y, String text, boolean checked) { GuiCheckBox checkBox = new GuiCheckBox(lastButtonId++, x, y, text, checked); @@ -209,9 +205,14 @@ public abstract class GuiBase extends GuiContainer { return checkBox; } - public GuiButton addButton(int x, int y, int w, int h, String text, boolean enabled) { + public GuiButton addButton(int x, int y, int w, int h, String text) { + return addButton(x, y, w, h, text, true, true); + } + + public GuiButton addButton(int x, int y, int w, int h, String text, boolean enabled, boolean visible) { GuiButton button = new GuiButton(lastButtonId++, x, y, w, h, text); button.enabled = enabled; + button.visible = visible; buttonList.add(button); diff --git a/src/main/java/com/raoulvdberge/refinedstorage/gui/GuiCraftingMonitor.java b/src/main/java/com/raoulvdberge/refinedstorage/gui/GuiCraftingMonitor.java index 1efb93410..63117e416 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/gui/GuiCraftingMonitor.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/gui/GuiCraftingMonitor.java @@ -76,8 +76,8 @@ public class GuiCraftingMonitor extends GuiBase { int cancelButtonWidth = 14 + fontRenderer.getStringWidth(cancel); int cancelAllButtonWidth = 14 + fontRenderer.getStringWidth(cancelAll); - cancelButton = addButton(x + 7, y + 113, cancelButtonWidth, 20, cancel, false); - cancelAllButton = addButton(x + 7 + cancelButtonWidth + 4, y + 113, cancelAllButtonWidth, 20, cancelAll, false); + cancelButton = addButton(x + 7, y + 113, cancelButtonWidth, 20, cancel, false, true); + cancelAllButton = addButton(x + 7 + cancelButtonWidth + 4, y + 113, cancelAllButtonWidth, 20, cancelAll, false, true); } @Override 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 01d28bf9d..f70621c82 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/gui/grid/GuiGrid.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/gui/grid/GuiGrid.java @@ -70,6 +70,9 @@ public class GuiGrid extends GuiBase implements IGridDisplay { private GuiCheckBox processingPattern; private GuiCheckBox blockingPattern; + private GuiButton tabPageLeft; + private GuiButton tabPageRight; + private IGrid grid; private boolean hadTabs = false; @@ -121,17 +124,20 @@ public class GuiGrid extends GuiBase implements IGridDisplay { public void init(int x, int y) { ((ContainerGrid) this.inventorySlots).initSlots(); - this.scrollbar = new Scrollbar(174, getTabDelta() + getHeader(), 12, (getVisibleRows() * 18) - 2); + this.scrollbar = new Scrollbar(174, getTabHeight() + getHeader(), 12, (getVisibleRows() * 18) - 2); if (grid instanceof NetworkNodeGrid || grid instanceof TilePortableGrid) { addSideButton(new SideButtonRedstoneMode(this, grid instanceof NetworkNodeGrid ? TileGrid.REDSTONE_MODE : TilePortableGrid.REDSTONE_MODE)); } + tabPageLeft = addButton(getGuiLeft(), getGuiTop() - 22, 20, 20, "<", true, grid.getTotalTabPages() > 0); + tabPageRight = addButton(getGuiLeft() + getXSize() - 22 - 32, getGuiTop() - 22, 20, 20, ">", true, grid.getTotalTabPages() > 0); + this.konamiOffsetsX = new int[9 * getVisibleRows()]; this.konamiOffsetsY = new int[9 * getVisibleRows()]; int sx = x + 80 + 1; - int sy = y + 6 + 1 + getTabDelta(); + int sy = y + 6 + 1 + getTabHeight(); if (searchField == null) { searchField = new GuiTextField(0, fontRenderer, sx, sy, 88 - 6, fontRenderer.FONT_HEIGHT); @@ -146,11 +152,11 @@ public class GuiGrid extends GuiBase implements IGridDisplay { } if (grid.getType() == GridType.PATTERN) { - processingPattern = addCheckBox(x + 7, y + getTabDelta() + getHeader() + (getVisibleRows() * 18) + 60, t("misc.refinedstorage:processing"), TileGrid.PROCESSING_PATTERN.getValue()); - oredictPattern = addCheckBox(processingPattern.x + processingPattern.width + 5, y + getTabDelta() + getHeader() + (getVisibleRows() * 18) + 60, t("misc.refinedstorage:oredict"), TileGrid.OREDICT_PATTERN.getValue()); + processingPattern = addCheckBox(x + 7, y + getTabHeight() + getHeader() + (getVisibleRows() * 18) + 60, t("misc.refinedstorage:processing"), TileGrid.PROCESSING_PATTERN.getValue()); + oredictPattern = addCheckBox(processingPattern.x + processingPattern.width + 5, y + getTabHeight() + getHeader() + (getVisibleRows() * 18) + 60, t("misc.refinedstorage:oredict"), TileGrid.OREDICT_PATTERN.getValue()); if (((NetworkNodeGrid) grid).isProcessingPattern()) { - blockingPattern = addCheckBox(oredictPattern.x + oredictPattern.width + 5, y + getTabDelta() + getHeader() + (getVisibleRows() * 18) + 60, t("misc.refinedstorage:blocking"), TileGrid.BLOCKING_PATTERN.getValue()); + blockingPattern = addCheckBox(oredictPattern.x + oredictPattern.width + 5, y + getTabHeight() + getHeader() + (getVisibleRows() * 18) + 60, t("misc.refinedstorage:blocking"), TileGrid.BLOCKING_PATTERN.getValue()); } } @@ -223,6 +229,9 @@ public class GuiGrid extends GuiBase implements IGridDisplay { scrollbar.setEnabled(getRows() > getVisibleRows()); scrollbar.setMaxOffset(getRows() - getVisibleRows()); } + + tabPageLeft.visible = grid.getTotalTabPages() > 0; + tabPageRight.visible = grid.getTotalTabPages() > 0; } @Override @@ -273,7 +282,7 @@ public class GuiGrid extends GuiBase implements IGridDisplay { @Override public int getYPlayerInventory() { - int yp = getTabDelta() + getHeader() + (getVisibleRows() * 18); + int yp = getTabHeight() + getHeader() + (getVisibleRows() * 18); if (grid.getType() == GridType.NORMAL || grid.getType() == GridType.FLUID) { yp += 16; @@ -318,11 +327,11 @@ public class GuiGrid extends GuiBase implements IGridDisplay { } public boolean isOverSlotArea(int mouseX, int mouseY) { - return inBounds(7, 19 + getTabDelta(), 162, 18 * getVisibleRows(), mouseX, mouseY); + return inBounds(7, 19 + getTabHeight(), 162, 18 * getVisibleRows(), mouseX, mouseY); } private boolean isOverClear(int mouseX, int mouseY) { - int y = getTabDelta() + getHeader() + (getVisibleRows() * 18) + 4; + int y = getTabHeight() + getHeader() + (getVisibleRows() * 18) + 4; switch (grid.getType()) { case CRAFTING: @@ -339,22 +348,21 @@ public class GuiGrid extends GuiBase implements IGridDisplay { } private boolean isOverCreatePattern(int mouseX, int mouseY) { - return grid.getType() == GridType.PATTERN && inBounds(172, getTabDelta() + getHeader() + (getVisibleRows() * 18) + 22, 16, 16, mouseX, mouseY) && ((NetworkNodeGrid) grid).canCreatePattern(); + return grid.getType() == GridType.PATTERN && inBounds(172, getTabHeight() + getHeader() + (getVisibleRows() * 18) + 22, 16, 16, mouseX, mouseY) && ((NetworkNodeGrid) grid).canCreatePattern(); } - private int getTabDelta() { + private int getTabHeight() { return !grid.getTabs().isEmpty() ? ContainerGrid.TAB_HEIGHT - 4 : 0; } - private void drawTab(IGridTab tab, boolean foregroundLayer, int x, int y, int mouseX, int mouseY) { - int i = grid.getTabs().indexOf(tab); - boolean selected = i == grid.getTabSelected(); + private void drawTab(IGridTab tab, boolean foregroundLayer, int x, int y, int mouseX, int mouseY, int index, int num) { + boolean selected = index == grid.getTabSelected(); if ((foregroundLayer && !selected) || (!foregroundLayer && selected)) { return; } - int tx = x + ((ContainerGrid.TAB_WIDTH + 1) * i); + int tx = x + ((ContainerGrid.TAB_WIDTH + 1) * num); int ty = y; bindTexture("icons.png"); @@ -371,7 +379,7 @@ public class GuiGrid extends GuiBase implements IGridDisplay { if (selected) { uvx = 227; - if (i > 0) { + if (num > 0) { uvx = 226; uvy = 194; tbw++; @@ -385,10 +393,10 @@ public class GuiGrid extends GuiBase implements IGridDisplay { RenderHelper.enableGUIStandardItemLighting(); - drawItem(otx + 6, ty + 8 - (!selected ? 2 : 0), tab.getIcon()); + drawItem(otx + 6, ty + 9 - (!selected ? 3 : 0), tab.getIcon()); if (inBounds(tx, ty, ContainerGrid.TAB_WIDTH, ContainerGrid.TAB_HEIGHT, mouseX, mouseY)) { - tabHovering = i; + tabHovering = index; } } @@ -396,8 +404,11 @@ public class GuiGrid extends GuiBase implements IGridDisplay { public void drawBackground(int x, int y, int mouseX, int mouseY) { tabHovering = -1; - for (IGridTab tab : grid.getTabs()) { - drawTab(tab, false, x, y, mouseX, mouseY); + int j = 0; + for (int i = grid.getTabPage() * IGrid.TABS_PER_PAGE; i < (grid.getTabPage() * IGrid.TABS_PER_PAGE) + IGrid.TABS_PER_PAGE; ++i) { + if (i < grid.getTabs().size()) { + drawTab(grid.getTabs().get(i), false, x, y, mouseX, mouseY, i, j++); + } } if (grid.getType() == GridType.CRAFTING) { @@ -410,12 +421,12 @@ public class GuiGrid extends GuiBase implements IGridDisplay { bindTexture("gui/grid.png"); } - int yy = y + getTabDelta(); + int yy = y + getTabHeight(); drawTexture(x, yy, 0, 0, screenWidth - (grid.getType() != GridType.FLUID ? 34 : 0), getHeader()); if (grid.getType() != GridType.FLUID) { - drawTexture(x + screenWidth - 34 + 4, y + getTabDelta(), 197, 0, 30, grid instanceof IPortableGrid ? 114 : 82); + drawTexture(x + screenWidth - 34 + 4, y + getTabHeight(), 197, 0, 30, grid instanceof IPortableGrid ? 114 : 82); } int rows = getVisibleRows(); @@ -441,11 +452,14 @@ public class GuiGrid extends GuiBase implements IGridDisplay { ty = 2; } - drawTexture(x + 172, y + getTabDelta() + getHeader() + (getVisibleRows() * 18) + 22, 240, ty * 16, 16, 16); + drawTexture(x + 172, y + getTabHeight() + getHeader() + (getVisibleRows() * 18) + 22, 240, ty * 16, 16, 16); } - for (IGridTab tab : grid.getTabs()) { - drawTab(tab, true, x, y, mouseX, mouseY); + j = 0; + for (int i = grid.getTabPage() * IGrid.TABS_PER_PAGE; i < (grid.getTabPage() * IGrid.TABS_PER_PAGE) + IGrid.TABS_PER_PAGE; ++i) { + if (i < grid.getTabs().size()) { + drawTab(grid.getTabs().get(i), true, x, y, mouseX, mouseY, i, j++); + } } if (searchField != null) { @@ -455,11 +469,17 @@ public class GuiGrid extends GuiBase implements IGridDisplay { @Override public void drawForeground(int mouseX, int mouseY) { - drawString(7, 7 + getTabDelta(), t(grid.getGuiTitle())); + drawString(7, 7 + getTabHeight(), t(grid.getGuiTitle())); drawString(7, getYPlayerInventory() - 12, t("container.inventory")); + if (grid.getTotalTabPages() > 0) { + String text = (grid.getTabPage() + 1) + " / " + (grid.getTotalTabPages() + 1); + + drawString((int) ((193F - (float) fontRenderer.getStringWidth(text)) / 2F), -16, text, 0xFFFFFF); + } + int x = 8; - int y = 19 + getTabDelta(); + int y = 19 + getTabHeight(); this.slotNumber = -1; @@ -532,6 +552,10 @@ public class GuiGrid extends GuiBase implements IGridDisplay { TileDataManager.setParameter(TileGrid.BLOCKING_PATTERN, blockingPattern.isChecked()); } else if (button == processingPattern) { TileDataManager.setParameter(TileGrid.PROCESSING_PATTERN, processingPattern.isChecked()); + } else if (button == tabPageLeft) { + grid.onTabPageChanged(grid.getTabPage() - 1); + } else if (button == tabPageRight) { + grid.onTabPageChanged(grid.getTabPage() + 1); } } @@ -548,7 +572,7 @@ public class GuiGrid extends GuiBase implements IGridDisplay { searchField.mouseClicked(mouseX, mouseY, clickedButton); - if (clickedButton == 1 && inBounds(79, 5 + getTabDelta(), 90, 12, mouseX - guiLeft, mouseY - guiTop)) { + if (clickedButton == 1 && inBounds(79, 5 + getTabHeight(), 90, 12, mouseX - guiLeft, mouseY - guiTop)) { searchField.setText(""); searchField.setFocused(true); diff --git a/src/main/java/com/raoulvdberge/refinedstorage/gui/sidebutton/SideButton.java b/src/main/java/com/raoulvdberge/refinedstorage/gui/sidebutton/SideButton.java index ce970e534..8779422d4 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/gui/sidebutton/SideButton.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/gui/sidebutton/SideButton.java @@ -24,6 +24,7 @@ public abstract class SideButton extends GuiButton { @Override public void drawButton(Minecraft mc, int mouseX, int mouseY, float partialTicks) { + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); GlStateManager.enableAlpha(); hovered = gui.inBounds(x, y, width, height, mouseX, mouseY); diff --git a/src/main/java/com/raoulvdberge/refinedstorage/inventory/ItemHandlerFilter.java b/src/main/java/com/raoulvdberge/refinedstorage/inventory/ItemHandlerFilter.java index 4c2f6707b..aa4d0026e 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/inventory/ItemHandlerFilter.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/inventory/ItemHandlerFilter.java @@ -38,27 +38,7 @@ public class ItemHandlerFilter extends ItemHandlerBase { ItemStack filter = getStackInSlot(i); if (!filter.isEmpty()) { - int compare = ItemFilter.getCompare(filter); - int mode = ItemFilter.getMode(filter); - boolean modFilter = ItemFilter.isModFilter(filter); - - ItemHandlerFilterItems items = new ItemHandlerFilterItems(filter); - - List filters = new ArrayList<>(); - - for (ItemStack item : items.getFilteredItems()) { - if (!item.isEmpty()) { - filters.add(new Filter(item, compare, mode, modFilter)); - } - } - - ItemStack icon = ItemFilter.getIcon(filter); - - if (icon.isEmpty()) { - this.filters.addAll(filters); - } else { - tabs.add(new GridTab(filters, ItemFilter.getName(filter), icon)); - } + addFilter(filter); } } @@ -66,4 +46,30 @@ public class ItemHandlerFilter extends ItemHandlerBase { GuiGrid.markForSorting(); } } + + private void addFilter(ItemStack filter) { + int compare = ItemFilter.getCompare(filter); + int mode = ItemFilter.getMode(filter); + boolean modFilter = ItemFilter.isModFilter(filter); + + ItemHandlerFilterItems items = new ItemHandlerFilterItems(filter); + + List filters = new ArrayList<>(); + + for (ItemStack stack : items.getFilteredItems()) { + if (stack.getItem() == RSItems.FILTER) { + addFilter(stack); + } else if (!stack.isEmpty()) { + filters.add(new Filter(stack, compare, mode, modFilter)); + } + } + + ItemStack icon = ItemFilter.getIcon(filter); + + if (icon.isEmpty()) { + this.filters.addAll(filters); + } else { + tabs.add(new GridTab(filters, ItemFilter.getName(filter), icon)); + } + } } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/item/ItemBlockPortableGrid.java b/src/main/java/com/raoulvdberge/refinedstorage/item/ItemBlockPortableGrid.java index 19a730b11..9ba9a4238 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/item/ItemBlockPortableGrid.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/item/ItemBlockPortableGrid.java @@ -61,6 +61,7 @@ public class ItemBlockPortableGrid extends ItemBlockEnergyItem { ItemWirelessGrid.getSortingType(oldStack) == ItemWirelessGrid.getSortingType(newStack) && ItemWirelessGrid.getSearchBoxMode(oldStack) == ItemWirelessGrid.getSearchBoxMode(newStack) && ItemWirelessGrid.getTabSelected(oldStack) == ItemWirelessGrid.getTabSelected(newStack) && + ItemWirelessGrid.getTabPage(oldStack) == ItemWirelessGrid.getTabPage(newStack) && ItemWirelessGrid.getSize(oldStack) == ItemWirelessGrid.getSize(newStack)) { return false; } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/item/ItemWirelessGrid.java b/src/main/java/com/raoulvdberge/refinedstorage/item/ItemWirelessGrid.java index 628f02c94..ef4d0ce22 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/item/ItemWirelessGrid.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/item/ItemWirelessGrid.java @@ -45,6 +45,10 @@ public class ItemWirelessGrid extends ItemNetworkItem { return (stack.hasTagCompound() && stack.getTagCompound().hasKey(NetworkNodeGrid.NBT_TAB_SELECTED)) ? stack.getTagCompound().getInteger(NetworkNodeGrid.NBT_TAB_SELECTED) : -1; } + public static int getTabPage(ItemStack stack) { + return (stack.hasTagCompound() && stack.getTagCompound().hasKey(NetworkNodeGrid.NBT_TAB_PAGE)) ? stack.getTagCompound().getInteger(NetworkNodeGrid.NBT_TAB_PAGE) : 0; + } + public static int getSize(ItemStack stack) { return (stack.hasTagCompound() && stack.getTagCompound().hasKey(NetworkNodeGrid.NBT_SIZE)) ? stack.getTagCompound().getInteger(NetworkNodeGrid.NBT_SIZE) : IGrid.SIZE_STRETCH; } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/network/MessageGridSettingsUpdate.java b/src/main/java/com/raoulvdberge/refinedstorage/network/MessageGridSettingsUpdate.java index 75ade24ac..6e47f325e 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/network/MessageGridSettingsUpdate.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/network/MessageGridSettingsUpdate.java @@ -18,17 +18,19 @@ public class MessageGridSettingsUpdate extends MessageHandlerPlayerToServer { GuiGrid.markForSorting(); } }); + public static final TileDataParameter TAB_PAGE = new TileDataParameter<>(DataSerializers.VARINT, 0, t -> t.getNode().getTabPage(), (t, v) -> { + if (v >= 0 && v <= t.getNode().getTotalTabPages()) { + t.getNode().setTabPage(v); + t.getNode().markDirty(); + } + }); public static final TileDataParameter OREDICT_PATTERN = new TileDataParameter<>(DataSerializers.BOOLEAN, false, t -> t.getNode().isOredictPattern(), (t, v) -> { t.getNode().setOredictPattern(v); t.getNode().markDirty(); @@ -106,6 +112,7 @@ public class TileGrid extends TileNode { dataManager.addWatchedParameter(SEARCH_BOX_MODE); dataManager.addWatchedParameter(SIZE); dataManager.addWatchedParameter(TAB_SELECTED); + dataManager.addWatchedParameter(TAB_PAGE); dataManager.addWatchedParameter(OREDICT_PATTERN); dataManager.addWatchedParameter(PROCESSING_PATTERN); dataManager.addWatchedParameter(BLOCKING_PATTERN); diff --git a/src/main/java/com/raoulvdberge/refinedstorage/tile/grid/WirelessFluidGrid.java b/src/main/java/com/raoulvdberge/refinedstorage/tile/grid/WirelessFluidGrid.java index 3d071e1c3..7db02bb37 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/tile/grid/WirelessFluidGrid.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/tile/grid/WirelessFluidGrid.java @@ -102,6 +102,16 @@ public class WirelessFluidGrid implements IGrid { return 0; } + @Override + public int getTabPage() { + return 0; + } + + @Override + public int getTotalTabPages() { + return 0; + } + @Override public int getSize() { return size; @@ -153,6 +163,11 @@ public class WirelessFluidGrid implements IGrid { // NO OP } + @Override + public void onTabPageChanged(int page) { + // NO OP + } + @Override public List getFilters() { return Collections.emptyList(); diff --git a/src/main/java/com/raoulvdberge/refinedstorage/tile/grid/WirelessGrid.java b/src/main/java/com/raoulvdberge/refinedstorage/tile/grid/WirelessGrid.java index e2d81b093..142e25493 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/tile/grid/WirelessGrid.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/tile/grid/WirelessGrid.java @@ -40,6 +40,7 @@ public class WirelessGrid implements IGrid { private int sortingDirection; private int searchBoxMode; private int tabSelected; + private int tabPage; private int size; private List filters = new ArrayList<>(); @@ -68,6 +69,7 @@ public class WirelessGrid implements IGrid { this.sortingDirection = ItemWirelessGrid.getSortingDirection(stack); this.searchBoxMode = ItemWirelessGrid.getSearchBoxMode(stack); this.tabSelected = ItemWirelessGrid.getTabSelected(stack); + this.tabPage = ItemWirelessGrid.getTabPage(stack); this.size = ItemWirelessGrid.getSize(stack); if (stack.hasTagCompound()) { @@ -128,6 +130,16 @@ public class WirelessGrid implements IGrid { return tabSelected; } + @Override + public int getTabPage() { + return tabPage; + } + + @Override + public int getTotalTabPages() { + return (int) Math.floor((float) tabs.size() / (float) IGrid.TABS_PER_PAGE); + } + @Override public int getSize() { return size; @@ -135,7 +147,7 @@ public class WirelessGrid implements IGrid { @Override public void onViewTypeChanged(int type) { - RS.INSTANCE.network.sendToServer(new MessageGridSettingsUpdate(type, getSortingDirection(), getSortingType(), getSearchBoxMode(), getSize(), getTabSelected())); + RS.INSTANCE.network.sendToServer(new MessageGridSettingsUpdate(type, getSortingDirection(), getSortingType(), getSearchBoxMode(), getSize(), getTabSelected(), getTabPage())); this.viewType = type; @@ -144,7 +156,7 @@ public class WirelessGrid implements IGrid { @Override public void onSortingTypeChanged(int type) { - RS.INSTANCE.network.sendToServer(new MessageGridSettingsUpdate(getViewType(), getSortingDirection(), type, getSearchBoxMode(), getSize(), getTabSelected())); + RS.INSTANCE.network.sendToServer(new MessageGridSettingsUpdate(getViewType(), getSortingDirection(), type, getSearchBoxMode(), getSize(), getTabSelected(), getTabPage())); this.sortingType = type; @@ -153,7 +165,7 @@ public class WirelessGrid implements IGrid { @Override public void onSortingDirectionChanged(int direction) { - RS.INSTANCE.network.sendToServer(new MessageGridSettingsUpdate(getViewType(), direction, getSortingType(), getSearchBoxMode(), getSize(), getTabSelected())); + RS.INSTANCE.network.sendToServer(new MessageGridSettingsUpdate(getViewType(), direction, getSortingType(), getSearchBoxMode(), getSize(), getTabSelected(), getTabPage())); this.sortingDirection = direction; @@ -162,14 +174,14 @@ public class WirelessGrid implements IGrid { @Override public void onSearchBoxModeChanged(int searchBoxMode) { - RS.INSTANCE.network.sendToServer(new MessageGridSettingsUpdate(getViewType(), getSortingDirection(), getSortingType(), searchBoxMode, getSize(), getTabSelected())); + RS.INSTANCE.network.sendToServer(new MessageGridSettingsUpdate(getViewType(), getSortingDirection(), getSortingType(), searchBoxMode, getSize(), getTabSelected(), getTabPage())); this.searchBoxMode = searchBoxMode; } @Override public void onSizeChanged(int size) { - RS.INSTANCE.network.sendToServer(new MessageGridSettingsUpdate(getViewType(), getSortingDirection(), getSortingType(), getSearchBoxMode(), size, getTabSelected())); + RS.INSTANCE.network.sendToServer(new MessageGridSettingsUpdate(getViewType(), getSortingDirection(), getSortingType(), getSearchBoxMode(), size, getTabSelected(), getTabPage())); this.size = size; @@ -182,11 +194,20 @@ public class WirelessGrid implements IGrid { public void onTabSelectionChanged(int tab) { this.tabSelected = tab == tabSelected ? -1 : tab; - RS.INSTANCE.network.sendToServer(new MessageGridSettingsUpdate(getViewType(), getSortingDirection(), getSortingType(), getSearchBoxMode(), getSize(), tabSelected)); + RS.INSTANCE.network.sendToServer(new MessageGridSettingsUpdate(getViewType(), getSortingDirection(), getSortingType(), getSearchBoxMode(), getSize(), tabSelected, getTabPage())); GuiGrid.markForSorting(); } + @Override + public void onTabPageChanged(int page) { + if (page >= 0 && page <= getTotalTabPages()) { + RS.INSTANCE.network.sendToServer(new MessageGridSettingsUpdate(getViewType(), getSortingDirection(), getSortingType(), getSearchBoxMode(), getSize(), getTabSelected(), page)); + + this.tabPage = page; + } + } + @Override public List getFilters() { return filters; diff --git a/src/main/java/com/raoulvdberge/refinedstorage/tile/grid/portable/PortableGrid.java b/src/main/java/com/raoulvdberge/refinedstorage/tile/grid/portable/PortableGrid.java index 970319400..200087609 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/tile/grid/portable/PortableGrid.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/tile/grid/portable/PortableGrid.java @@ -55,6 +55,7 @@ public class PortableGrid implements IGrid, IPortableGrid { private int sortingDirection; private int searchBoxMode; private int tabSelected; + private int tabPage; private int size; private List filters = new ArrayList<>(); @@ -119,6 +120,7 @@ public class PortableGrid implements IGrid, IPortableGrid { this.sortingDirection = ItemWirelessGrid.getSortingDirection(stack); this.searchBoxMode = ItemWirelessGrid.getSearchBoxMode(stack); this.tabSelected = ItemWirelessGrid.getTabSelected(stack); + this.tabPage = ItemWirelessGrid.getTabPage(stack); this.size = ItemWirelessGrid.getSize(stack); } @@ -234,6 +236,16 @@ public class PortableGrid implements IGrid, IPortableGrid { return tabSelected; } + @Override + public int getTabPage() { + return tabPage; + } + + @Override + public int getTotalTabPages() { + return (int) Math.floor((float) tabs.size() / (float) IGrid.TABS_PER_PAGE); + } + @Override public int getSize() { return size; @@ -246,7 +258,7 @@ public class PortableGrid implements IGrid, IPortableGrid { @Override public void onSortingTypeChanged(int type) { - RS.INSTANCE.network.sendToServer(new MessageGridSettingsUpdate(getViewType(), getSortingDirection(), type, getSearchBoxMode(), getSize(), getTabSelected())); + RS.INSTANCE.network.sendToServer(new MessageGridSettingsUpdate(getViewType(), getSortingDirection(), type, getSearchBoxMode(), getSize(), getTabSelected(), getTabPage())); this.sortingType = type; @@ -255,7 +267,7 @@ public class PortableGrid implements IGrid, IPortableGrid { @Override public void onSortingDirectionChanged(int direction) { - RS.INSTANCE.network.sendToServer(new MessageGridSettingsUpdate(getViewType(), direction, getSortingType(), getSearchBoxMode(), getSize(), getTabSelected())); + RS.INSTANCE.network.sendToServer(new MessageGridSettingsUpdate(getViewType(), direction, getSortingType(), getSearchBoxMode(), getSize(), getTabSelected(), getTabPage())); this.sortingDirection = direction; @@ -264,14 +276,14 @@ public class PortableGrid implements IGrid, IPortableGrid { @Override public void onSearchBoxModeChanged(int searchBoxMode) { - RS.INSTANCE.network.sendToServer(new MessageGridSettingsUpdate(getViewType(), getSortingDirection(), getSortingType(), searchBoxMode, getSize(), getTabSelected())); + RS.INSTANCE.network.sendToServer(new MessageGridSettingsUpdate(getViewType(), getSortingDirection(), getSortingType(), searchBoxMode, getSize(), getTabSelected(), getTabPage())); this.searchBoxMode = searchBoxMode; } @Override public void onSizeChanged(int size) { - RS.INSTANCE.network.sendToServer(new MessageGridSettingsUpdate(getViewType(), getSortingDirection(), getSortingType(), getSearchBoxMode(), size, getTabSelected())); + RS.INSTANCE.network.sendToServer(new MessageGridSettingsUpdate(getViewType(), getSortingDirection(), getSortingType(), getSearchBoxMode(), size, getTabSelected(), getTabPage())); this.size = size; @@ -284,11 +296,20 @@ public class PortableGrid implements IGrid, IPortableGrid { public void onTabSelectionChanged(int tab) { this.tabSelected = tab == tabSelected ? -1 : tab; - RS.INSTANCE.network.sendToServer(new MessageGridSettingsUpdate(getViewType(), getSortingDirection(), getSortingType(), getSearchBoxMode(), getSize(), tabSelected)); + RS.INSTANCE.network.sendToServer(new MessageGridSettingsUpdate(getViewType(), getSortingDirection(), getSortingType(), getSearchBoxMode(), getSize(), tabSelected, getTabPage())); GuiGrid.markForSorting(); } + @Override + public void onTabPageChanged(int page) { + if (page >= 0 && page <= getTotalTabPages()) { + RS.INSTANCE.network.sendToServer(new MessageGridSettingsUpdate(getViewType(), getSortingDirection(), getSortingType(), getSearchBoxMode(), getSize(), getTabSelected(), page)); + + this.tabPage = page; + } + } + @Override public List getFilters() { return filters; diff --git a/src/main/java/com/raoulvdberge/refinedstorage/tile/grid/portable/TilePortableGrid.java b/src/main/java/com/raoulvdberge/refinedstorage/tile/grid/portable/TilePortableGrid.java index 5ad95f5d0..a4018dbcd 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/tile/grid/portable/TilePortableGrid.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/tile/grid/portable/TilePortableGrid.java @@ -96,6 +96,12 @@ public class TilePortableGrid extends TileBase implements IGrid, IPortableGrid, GuiGrid.markForSorting(); } }); + public static final TileDataParameter TAB_PAGE = new TileDataParameter<>(DataSerializers.VARINT, 0, TilePortableGrid::getTabPage, (t, v) -> { + if (v >= 0 && v <= t.getTotalTabPages()) { + t.setTabPage(v); + t.markDirty(); + } + }); private static final String NBT_ENERGY = "Energy"; private static final String NBT_DISK_STATE = "DiskState"; @@ -110,6 +116,7 @@ public class TilePortableGrid extends TileBase implements IGrid, IPortableGrid, private int sortingDirection; private int searchBoxMode; private int tabSelected; + private int tabPage; private int size; private List filters = new ArrayList<>(); @@ -181,6 +188,7 @@ public class TilePortableGrid extends TileBase implements IGrid, IPortableGrid, dataManager.addWatchedParameter(SEARCH_BOX_MODE); dataManager.addWatchedParameter(SIZE); dataManager.addWatchedParameter(TAB_SELECTED); + dataManager.addWatchedParameter(TAB_PAGE); } public PortableGridDiskState getDiskState() { @@ -204,6 +212,7 @@ public class TilePortableGrid extends TileBase implements IGrid, IPortableGrid, this.sortingDirection = ItemWirelessGrid.getSortingDirection(stack); this.searchBoxMode = ItemWirelessGrid.getSearchBoxMode(stack); this.tabSelected = ItemWirelessGrid.getTabSelected(stack); + this.tabPage = ItemWirelessGrid.getTabPage(stack); this.size = ItemWirelessGrid.getSize(stack); this.energyStorage.setEnergyStored(stack.getCapability(CapabilityEnergy.ENERGY, null).getEnergyStored()); @@ -298,6 +307,16 @@ public class TilePortableGrid extends TileBase implements IGrid, IPortableGrid, return world.isRemote ? TAB_SELECTED.getValue() : tabSelected; } + @Override + public int getTabPage() { + return world.isRemote ? TAB_PAGE.getValue() : tabPage; + } + + @Override + public int getTotalTabPages() { + return (int) Math.floor((float) tabs.size() / (float) IGrid.TABS_PER_PAGE); + } + @Override public int getSize() { return world.isRemote ? SIZE.getValue() : size; @@ -319,6 +338,10 @@ public class TilePortableGrid extends TileBase implements IGrid, IPortableGrid, this.tabSelected = tabSelected; } + public void setTabPage(int page) { + this.tabPage = page; + } + public void setSize(int size) { this.size = size; } @@ -353,6 +376,13 @@ public class TilePortableGrid extends TileBase implements IGrid, IPortableGrid, TileDataManager.setParameter(TAB_SELECTED, tab); } + @Override + public void onTabPageChanged(int page) { + if (page >= 0 && page <= getTotalTabPages()) { + TileDataManager.setParameter(TilePortableGrid.TAB_PAGE, page); + } + } + @Override public List getFilters() { return filters; @@ -490,6 +520,7 @@ public class TilePortableGrid extends TileBase implements IGrid, IPortableGrid, tag.setInteger(NetworkNodeGrid.NBT_SEARCH_BOX_MODE, searchBoxMode); tag.setInteger(NetworkNodeGrid.NBT_SIZE, size); tag.setInteger(NetworkNodeGrid.NBT_TAB_SELECTED, tabSelected); + tag.setInteger(NetworkNodeGrid.NBT_TAB_PAGE, tabPage); StackUtils.writeItems(disk, 0, tag); StackUtils.writeItems(filter, 1, tag); @@ -525,6 +556,10 @@ public class TilePortableGrid extends TileBase implements IGrid, IPortableGrid, tabSelected = tag.getInteger(NetworkNodeGrid.NBT_TAB_SELECTED); } + if (tag.hasKey(NetworkNodeGrid.NBT_TAB_PAGE)) { + tabPage = tag.getInteger(NetworkNodeGrid.NBT_TAB_PAGE); + } + StackUtils.readItems(disk, 0, tag); StackUtils.readItems(filter, 1, tag);