From cd7cc8fc8d2c616ef0e54516fa5c1dc30ac91d45 Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Wed, 7 Dec 2016 23:44:52 +0100 Subject: [PATCH] Sync selected tab to server --- .../refinedstorage/gui/grid/GuiGrid.java | 27 ++++++------- .../refinedstorage/item/ItemWirelessGrid.java | 5 +++ .../MessageWirelessGridSettingsUpdate.java | 8 +++- .../refinedstorage/tile/grid/IGrid.java | 4 ++ .../refinedstorage/tile/grid/TileGrid.java | 38 +++++++++++++++++++ .../tile/grid/WirelessGrid.java | 24 ++++++++++-- 6 files changed, 88 insertions(+), 18 deletions(-) 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 6a5485398..e1e8412a7 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/gui/grid/GuiGrid.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/gui/grid/GuiGrid.java @@ -62,7 +62,6 @@ public class GuiGrid extends GuiBase { private IGrid grid; private boolean hadTabs = false; - private int tabSelected = -1; private int tabHovering = -1; private int slotNumber; @@ -88,12 +87,11 @@ public class GuiGrid extends GuiBase { } public GuiGrid(ContainerGrid container, IGrid grid) { - super(container, grid.getType() == EnumGridType.FLUID ? 193 : 227, ((grid.getType() == EnumGridType.CRAFTING || grid.getType() == EnumGridType.PATTERN) ? 247 : 208) + (!grid.getTabs().isEmpty() ? ContainerGrid.TAB_HEIGHT : 0)); + super(container, grid.getType() == EnumGridType.FLUID ? 193 : 227, (grid.getType() == EnumGridType.CRAFTING || grid.getType() == EnumGridType.PATTERN) ? 247 : 208); this.container = container; this.grid = grid; this.wasConnected = this.grid.isActive(); - this.hadTabs = !grid.getTabs().isEmpty(); this.konamiOffsetsX = new int[9 * getVisibleRows()]; this.konamiOffsetsY = new int[9 * getVisibleRows()]; @@ -152,7 +150,11 @@ public class GuiGrid extends GuiBase { if (grid.isActive()) { stacks.addAll(grid.getType() == EnumGridType.FLUID ? FLUIDS.values() : ITEMS.values()); - List filters = GridFilterParser.getFilters(grid, searchField.getText(), (tabSelected >= 0 && tabSelected < grid.getTabs().size()) ? grid.getTabs().get(tabSelected).getFilters() : grid.getFilteredItems()); + List filters = GridFilterParser.getFilters( + grid, + searchField.getText(), + (grid.getTabSelected() >= 0 && grid.getTabSelected() < grid.getTabs().size()) ? grid.getTabs().get(grid.getTabSelected()).getFilters() : grid.getFilteredItems() + ); Iterator t = stacks.iterator(); @@ -210,13 +212,14 @@ public class GuiGrid extends GuiBase { if (hadTabs != hasTabs) { hadTabs = hasTabs; - height = (grid.getType() == EnumGridType.CRAFTING || grid.getType() == EnumGridType.PATTERN) ? 247 : 208; - ySize = height; + ySize = (grid.getType() == EnumGridType.CRAFTING || grid.getType() == EnumGridType.PATTERN) ? 247 : 208; if (hasTabs) { - height += ContainerGrid.TAB_HEIGHT; + ySize += ContainerGrid.TAB_HEIGHT; } + this.height = ySize; + initGui(); container.updateSlotsAccordingToTabs(); @@ -264,13 +267,13 @@ public class GuiGrid extends GuiBase { private void renderTab(GridTab tab, boolean foregroundLayer, int x, int y, int mouseX, int mouseY) { int i = grid.getTabs().indexOf(tab); - boolean selected = i == tabSelected; + boolean selected = i == grid.getTabSelected(); if ((foregroundLayer && !selected) || (!foregroundLayer && selected)) { return; } - int tx = x + ((ContainerGrid.TAB_WIDTH + 2) * i); + int tx = x + ((ContainerGrid.TAB_WIDTH + 1) * i); int ty = y; bindTexture("icons.png"); @@ -301,7 +304,7 @@ public class GuiGrid extends GuiBase { RenderHelper.enableGUIStandardItemLighting(); - drawItem(otx + 6, ty + 8 - (!selected ? 3 : 0), tab.getIcon()); + drawItem(otx + 6, ty + 8 - (!selected ? 2 : 0), tab.getIcon()); if (inBounds(tx, ty, ContainerGrid.TAB_WIDTH, ContainerGrid.TAB_HEIGHT, mouseX, mouseY)) { tabHovering = i; @@ -430,9 +433,7 @@ public class GuiGrid extends GuiBase { searchField.mouseClicked(mouseX, mouseY, clickedButton); if (tabHovering >= 0 && tabHovering < grid.getTabs().size()) { - tabSelected = tabSelected == tabHovering ? -1 : tabHovering; - - sortItems(); + grid.onTabSelectionChanged(tabHovering); } if (clickedButton == 1 && inBounds(79, 5 + getTabDelta(), 90, 12, mouseX - guiLeft, mouseY - guiTop)) { diff --git a/src/main/java/com/raoulvdberge/refinedstorage/item/ItemWirelessGrid.java b/src/main/java/com/raoulvdberge/refinedstorage/item/ItemWirelessGrid.java index 31b1695f7..77ba454d1 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/item/ItemWirelessGrid.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/item/ItemWirelessGrid.java @@ -21,6 +21,7 @@ public class ItemWirelessGrid extends ItemNetworkItem { tag.setInteger(TileGrid.NBT_SORTING_DIRECTION, TileGrid.SORTING_DIRECTION_DESCENDING); tag.setInteger(TileGrid.NBT_SORTING_TYPE, TileGrid.SORTING_TYPE_QUANTITY); tag.setInteger(TileGrid.NBT_SEARCH_BOX_MODE, TileGrid.SEARCH_BOX_MODE_NORMAL); + tag.setInteger(TileGrid.NBT_TAB_SELECTED, -1); } @Override @@ -52,4 +53,8 @@ public class ItemWirelessGrid extends ItemNetworkItem { public static int getSearchBoxMode(ItemStack stack) { return stack.getTagCompound().getInteger(TileGrid.NBT_SEARCH_BOX_MODE); } + + public static int getTabSelected(ItemStack stack) { + return (stack.hasTagCompound() && stack.getTagCompound().hasKey(TileGrid.NBT_TAB_SELECTED)) ? stack.getTagCompound().getInteger(TileGrid.NBT_TAB_SELECTED) : -1; + } } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/network/MessageWirelessGridSettingsUpdate.java b/src/main/java/com/raoulvdberge/refinedstorage/network/MessageWirelessGridSettingsUpdate.java index 877fb1c44..257f1e911 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/network/MessageWirelessGridSettingsUpdate.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/network/MessageWirelessGridSettingsUpdate.java @@ -14,15 +14,17 @@ public class MessageWirelessGridSettingsUpdate extends MessageHandlerPlayerToSer private int sortingDirection; private int sortingType; private int searchBoxMode; + private int tabSelected; public MessageWirelessGridSettingsUpdate() { } - public MessageWirelessGridSettingsUpdate(int viewType, int sortingDirection, int sortingType, int searchBoxMode) { + public MessageWirelessGridSettingsUpdate(int viewType, int sortingDirection, int sortingType, int searchBoxMode, int tabSelected) { this.viewType = viewType; this.sortingDirection = sortingDirection; this.sortingType = sortingType; this.searchBoxMode = searchBoxMode; + this.tabSelected = tabSelected; } @Override @@ -31,6 +33,7 @@ public class MessageWirelessGridSettingsUpdate extends MessageHandlerPlayerToSer sortingDirection = buf.readInt(); sortingType = buf.readInt(); searchBoxMode = buf.readInt(); + tabSelected = buf.readInt(); } @Override @@ -39,6 +42,7 @@ public class MessageWirelessGridSettingsUpdate extends MessageHandlerPlayerToSer buf.writeInt(sortingDirection); buf.writeInt(sortingType); buf.writeInt(searchBoxMode); + buf.writeInt(tabSelected); } @Override @@ -64,6 +68,8 @@ public class MessageWirelessGridSettingsUpdate extends MessageHandlerPlayerToSer if (TileGrid.isValidSearchBoxMode(message.searchBoxMode)) { stack.getTagCompound().setInteger(TileGrid.NBT_SEARCH_BOX_MODE, message.searchBoxMode); } + + stack.getTagCompound().setInteger(TileGrid.NBT_TAB_SELECTED, message.tabSelected); } } } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/tile/grid/IGrid.java b/src/main/java/com/raoulvdberge/refinedstorage/tile/grid/IGrid.java index 319afdf68..f6628f4e1 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/tile/grid/IGrid.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/tile/grid/IGrid.java @@ -32,6 +32,8 @@ public interface IGrid { int getSearchBoxMode(); + int getTabSelected(); + void onViewTypeChanged(int type); void onSortingTypeChanged(int type); @@ -40,6 +42,8 @@ public interface IGrid { void onSearchBoxModeChanged(int searchBoxMode); + void onTabSelectionChanged(int tab); + List getFilteredItems(); List getTabs(); diff --git a/src/main/java/com/raoulvdberge/refinedstorage/tile/grid/TileGrid.java b/src/main/java/com/raoulvdberge/refinedstorage/tile/grid/TileGrid.java index d503c800f..73ec4a8d1 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/tile/grid/TileGrid.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/tile/grid/TileGrid.java @@ -110,6 +110,24 @@ public class TileGrid extends TileNode implements IGrid { } }); + public static final TileDataParameter TAB_SELECTED = new TileDataParameter<>(DataSerializers.VARINT, 0, new ITileDataProducer() { + @Override + public Integer getValue(TileGrid tile) { + return tile.tabSelected; + } + }, new ITileDataConsumer() { + @Override + public void setValue(TileGrid tile, Integer value) { + tile.tabSelected = value == tile.tabSelected ? -1 : value; + + tile.markDirty(); + } + }, parameter -> { + if (Minecraft.getMinecraft().currentScreen instanceof GuiGrid) { + ((GuiGrid) Minecraft.getMinecraft().currentScreen).markForSorting(); + } + }); + public static final TileDataParameter OREDICT_PATTERN = new TileDataParameter<>(DataSerializers.BOOLEAN, false, new ITileDataProducer() { @Override public Boolean getValue(TileGrid tile) { @@ -133,6 +151,7 @@ public class TileGrid extends TileNode implements IGrid { public static final String NBT_SORTING_TYPE = "SortingType"; 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 int SORTING_DIRECTION_ASCENDING = 0; public static final int SORTING_DIRECTION_DESCENDING = 1; @@ -175,6 +194,8 @@ public class TileGrid extends TileNode implements IGrid { private int sortingType = SORTING_TYPE_QUANTITY; private int searchBoxMode = SEARCH_BOX_MODE_NORMAL; + private int tabSelected = -1; + private boolean oredictPattern = false; public TileGrid() { @@ -182,6 +203,7 @@ public class TileGrid extends TileNode implements IGrid { dataManager.addWatchedParameter(SORTING_DIRECTION); dataManager.addWatchedParameter(SORTING_TYPE); dataManager.addWatchedParameter(SEARCH_BOX_MODE); + dataManager.addWatchedParameter(TAB_SELECTED); dataManager.addWatchedParameter(OREDICT_PATTERN); } @@ -463,6 +485,11 @@ public class TileGrid extends TileNode implements IGrid { return getWorld().isRemote ? SEARCH_BOX_MODE.getValue() : searchBoxMode; } + @Override + public int getTabSelected() { + return getWorld().isRemote ? TAB_SELECTED.getValue() : tabSelected; + } + @Override public void onViewTypeChanged(int type) { TileDataManager.setParameter(VIEW_TYPE, type); @@ -483,6 +510,11 @@ public class TileGrid extends TileNode implements IGrid { TileDataManager.setParameter(SEARCH_BOX_MODE, searchBoxMode); } + @Override + public void onTabSelectionChanged(int tab) { + TileDataManager.setParameter(TAB_SELECTED, tab); + } + @Override public TileDataParameter getRedstoneModeConfig() { return REDSTONE_MODE; @@ -500,6 +532,10 @@ public class TileGrid extends TileNode implements IGrid { RSUtils.readItemsLegacy(matrix, 0, tag); RSUtils.readItems(patterns, 1, tag); RSUtils.readItems(filter, 2, tag); + + if (tag.hasKey(NBT_TAB_SELECTED)) { + tabSelected = tag.getInteger(NBT_TAB_SELECTED); + } } @Override @@ -510,6 +546,8 @@ public class TileGrid extends TileNode implements IGrid { RSUtils.writeItems(patterns, 1, tag); RSUtils.writeItems(filter, 2, tag); + tag.setInteger(NBT_TAB_SELECTED, tabSelected); + return tag; } 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 1bedbb62c..5c1396986 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/tile/grid/WirelessGrid.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/tile/grid/WirelessGrid.java @@ -37,6 +37,7 @@ public class WirelessGrid implements IGrid { private int sortingType; private int sortingDirection; private int searchBoxMode; + private int tabSelected; private List filteredItems = new ArrayList<>(); private List tabs = new ArrayList<>(); @@ -65,6 +66,7 @@ public class WirelessGrid implements IGrid { this.sortingType = ItemWirelessGrid.getSortingType(stack); this.sortingDirection = ItemWirelessGrid.getSortingDirection(stack); this.searchBoxMode = ItemWirelessGrid.getSearchBoxMode(stack); + this.tabSelected = ItemWirelessGrid.getTabSelected(stack); if (stack.hasTagCompound()) { for (int i = 0; i < 4; ++i) { @@ -124,9 +126,14 @@ public class WirelessGrid implements IGrid { return searchBoxMode; } + @Override + public int getTabSelected() { + return tabSelected; + } + @Override public void onViewTypeChanged(int type) { - RS.INSTANCE.network.sendToServer(new MessageWirelessGridSettingsUpdate(type, getSortingDirection(), getSortingType(), getSearchBoxMode())); + RS.INSTANCE.network.sendToServer(new MessageWirelessGridSettingsUpdate(type, getSortingDirection(), getSortingType(), getSearchBoxMode(), tabSelected)); this.viewType = type; @@ -135,7 +142,7 @@ public class WirelessGrid implements IGrid { @Override public void onSortingTypeChanged(int type) { - RS.INSTANCE.network.sendToServer(new MessageWirelessGridSettingsUpdate(getViewType(), getSortingDirection(), type, getSearchBoxMode())); + RS.INSTANCE.network.sendToServer(new MessageWirelessGridSettingsUpdate(getViewType(), getSortingDirection(), type, getSearchBoxMode(), tabSelected)); this.sortingType = type; @@ -144,7 +151,7 @@ public class WirelessGrid implements IGrid { @Override public void onSortingDirectionChanged(int direction) { - RS.INSTANCE.network.sendToServer(new MessageWirelessGridSettingsUpdate(getViewType(), direction, getSortingType(), getSearchBoxMode())); + RS.INSTANCE.network.sendToServer(new MessageWirelessGridSettingsUpdate(getViewType(), direction, getSortingType(), getSearchBoxMode(), tabSelected)); this.sortingDirection = direction; @@ -153,11 +160,20 @@ public class WirelessGrid implements IGrid { @Override public void onSearchBoxModeChanged(int searchBoxMode) { - RS.INSTANCE.network.sendToServer(new MessageWirelessGridSettingsUpdate(getViewType(), getSortingDirection(), getSortingType(), searchBoxMode)); + RS.INSTANCE.network.sendToServer(new MessageWirelessGridSettingsUpdate(getViewType(), getSortingDirection(), getSortingType(), searchBoxMode, tabSelected)); this.searchBoxMode = searchBoxMode; } + @Override + public void onTabSelectionChanged(int tab) { + RS.INSTANCE.network.sendToServer(new MessageWirelessGridSettingsUpdate(getViewType(), getSortingDirection(), getSortingType(), searchBoxMode, tab)); + + this.tabSelected = tab; + + GuiGrid.markForSorting(); + } + @Override public List getFilteredItems() { return filteredItems;