Sync selected tab to server

This commit is contained in:
Raoul Van den Berge
2016-12-07 23:44:52 +01:00
parent ede2cba636
commit cd7cc8fc8d
6 changed files with 88 additions and 18 deletions

View File

@@ -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<IGridFilter> filters = GridFilterParser.getFilters(grid, searchField.getText(), (tabSelected >= 0 && tabSelected < grid.getTabs().size()) ? grid.getTabs().get(tabSelected).getFilters() : grid.getFilteredItems());
List<IGridFilter> filters = GridFilterParser.getFilters(
grid,
searchField.getText(),
(grid.getTabSelected() >= 0 && grid.getTabSelected() < grid.getTabs().size()) ? grid.getTabs().get(grid.getTabSelected()).getFilters() : grid.getFilteredItems()
);
Iterator<IClientStack> 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)) {

View File

@@ -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;
}
}

View File

@@ -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);
}
}
}

View File

@@ -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<GridFilteredItem> getFilteredItems();
List<GridTab> getTabs();

View File

@@ -110,6 +110,24 @@ public class TileGrid extends TileNode implements IGrid {
}
});
public static final TileDataParameter<Integer> TAB_SELECTED = new TileDataParameter<>(DataSerializers.VARINT, 0, new ITileDataProducer<Integer, TileGrid>() {
@Override
public Integer getValue(TileGrid tile) {
return tile.tabSelected;
}
}, new ITileDataConsumer<Integer, TileGrid>() {
@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<Boolean> OREDICT_PATTERN = new TileDataParameter<>(DataSerializers.BOOLEAN, false, new ITileDataProducer<Boolean, TileGrid>() {
@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<Integer> 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;
}

View File

@@ -37,6 +37,7 @@ public class WirelessGrid implements IGrid {
private int sortingType;
private int sortingDirection;
private int searchBoxMode;
private int tabSelected;
private List<GridFilteredItem> filteredItems = new ArrayList<>();
private List<GridTab> 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<GridFilteredItem> getFilteredItems() {
return filteredItems;