From afd38354e308bad62a93c0a104e22132fea93f09 Mon Sep 17 00:00:00 2001 From: way2muchnoise Date: Thu, 2 Feb 2017 17:02:31 +0100 Subject: [PATCH] adds ID sorting option, forward port 7ceea1d6a6b9e40ed7ba889e7180fb9b313fb2c6 --- .../apiimpl/network/node/NetworkNodeGrid.java | 3 +- .../refinedstorage/gui/grid/GuiGrid.java | 10 +++++-- .../gui/grid/sorting/GridSortingID.java | 28 +++++++++++++++++++ .../sidebutton/SideButtonGridSortingType.java | 7 +++++ .../assets/refinedstorage/lang/en_US.lang | 1 + 5 files changed, 46 insertions(+), 3 deletions(-) create mode 100644 src/main/java/com/raoulvdberge/refinedstorage/gui/grid/sorting/GridSortingID.java 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 085d2d800..96625b729 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 int SORTING_TYPE_QUANTITY = 0; public static final int SORTING_TYPE_NAME = 1; + public static final int SORTING_TYPE_ID= 2; public static final int SEARCH_BOX_MODE_NORMAL = 0; public static final int SEARCH_BOX_MODE_NORMAL_AUTOSELECTED = 1; @@ -559,7 +560,7 @@ public class NetworkNodeGrid extends NetworkNode implements IGrid { } public static boolean isValidSortingType(int type) { - return type == SORTING_TYPE_QUANTITY || type == SORTING_TYPE_NAME; + return type == SORTING_TYPE_QUANTITY || type == SORTING_TYPE_NAME || type == SORTING_TYPE_ID; } public static boolean isValidSortingDirection(int direction) { 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 d8700a617..6960c9c46 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/gui/grid/GuiGrid.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/gui/grid/GuiGrid.java @@ -11,6 +11,8 @@ import com.raoulvdberge.refinedstorage.container.ContainerGrid; import com.raoulvdberge.refinedstorage.gui.GuiBase; import com.raoulvdberge.refinedstorage.gui.Scrollbar; import com.raoulvdberge.refinedstorage.gui.grid.filtering.GridFilterParser; +import com.raoulvdberge.refinedstorage.gui.grid.sorting.GridSorting; +import com.raoulvdberge.refinedstorage.gui.grid.sorting.GridSortingID; import com.raoulvdberge.refinedstorage.gui.grid.sorting.GridSortingName; import com.raoulvdberge.refinedstorage.gui.grid.sorting.GridSortingQuantity; import com.raoulvdberge.refinedstorage.gui.grid.stack.GridStackFluid; @@ -45,8 +47,9 @@ import java.util.concurrent.ThreadLocalRandom; import java.util.function.Predicate; public class GuiGrid extends GuiBase implements IGridDisplay { - private static final GridSortingQuantity SORTING_QUANTITY = new GridSortingQuantity(); - private static final GridSortingName SORTING_NAME = new GridSortingName(); + private static final GridSorting SORTING_QUANTITY = new GridSortingQuantity(); + private static final GridSorting SORTING_NAME = new GridSortingName(); + private static final GridSorting SORTING_ID = new GridSortingID(); public static final ListMultimap ITEMS = Multimaps.synchronizedListMultimap(ArrayListMultimap.create()); public static final ListMultimap FLUIDS = Multimaps.synchronizedListMultimap(ArrayListMultimap.create()); @@ -187,11 +190,14 @@ public class GuiGrid extends GuiBase implements IGridDisplay { SORTING_NAME.setSortingDirection(grid.getSortingDirection()); SORTING_QUANTITY.setSortingDirection(grid.getSortingDirection()); + SORTING_ID.setSortingDirection(grid.getSortingDirection()); stacks.sort(SORTING_NAME); if (grid.getSortingType() == NetworkNodeGrid.SORTING_TYPE_QUANTITY) { stacks.sort(SORTING_QUANTITY); + } else if (grid.getSortingType() == NetworkNodeGrid.SORTING_TYPE_ID) { + stacks.sort(SORTING_ID); } } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/gui/grid/sorting/GridSortingID.java b/src/main/java/com/raoulvdberge/refinedstorage/gui/grid/sorting/GridSortingID.java new file mode 100644 index 000000000..b22cdb45f --- /dev/null +++ b/src/main/java/com/raoulvdberge/refinedstorage/gui/grid/sorting/GridSortingID.java @@ -0,0 +1,28 @@ +package com.raoulvdberge.refinedstorage.gui.grid.sorting; + +import com.raoulvdberge.refinedstorage.apiimpl.network.node.NetworkNodeGrid; +import com.raoulvdberge.refinedstorage.gui.grid.stack.IGridStack; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; + +public class GridSortingID extends GridSorting { + @Override + public int compare(IGridStack left, IGridStack right) { + int x = left.getHash(); + int y = right.getHash(); + if (left.getIngredient() instanceof ItemStack && right.getIngredient() instanceof ItemStack) { + x = Item.getIdFromItem(((ItemStack) left.getIngredient()).getItem()); + y = Item.getIdFromItem(((ItemStack) right.getIngredient()).getItem()); + } + + if (x != y) { + if (sortingDirection == NetworkNodeGrid.SORTING_DIRECTION_DESCENDING) { + return Integer.compare(x, y); + } else if (sortingDirection == NetworkNodeGrid.SORTING_DIRECTION_ASCENDING) { + return Integer.compare(y, x); + } + } + + return 0; + } +} \ No newline at end of file diff --git a/src/main/java/com/raoulvdberge/refinedstorage/gui/sidebutton/SideButtonGridSortingType.java b/src/main/java/com/raoulvdberge/refinedstorage/gui/sidebutton/SideButtonGridSortingType.java index 24ad26234..e14b90e28 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/gui/sidebutton/SideButtonGridSortingType.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/gui/sidebutton/SideButtonGridSortingType.java @@ -1,6 +1,7 @@ package com.raoulvdberge.refinedstorage.gui.sidebutton; import com.raoulvdberge.refinedstorage.apiimpl.network.node.NetworkNodeGrid; +import com.raoulvdberge.refinedstorage.block.EnumGridType; import com.raoulvdberge.refinedstorage.gui.GuiBase; import com.raoulvdberge.refinedstorage.tile.grid.IGrid; import net.minecraft.util.text.TextFormatting; @@ -31,6 +32,12 @@ public class SideButtonGridSortingType extends SideButton { if (type == NetworkNodeGrid.SORTING_TYPE_QUANTITY) { type = NetworkNodeGrid.SORTING_TYPE_NAME; } else if (type == NetworkNodeGrid.SORTING_TYPE_NAME) { + if (grid.getType() == EnumGridType.FLUID) { + type = NetworkNodeGrid.SORTING_TYPE_QUANTITY; + } else { + type = NetworkNodeGrid.SORTING_TYPE_ID; + } + } else if (type == NetworkNodeGrid.SORTING_TYPE_ID) { type = NetworkNodeGrid.SORTING_TYPE_QUANTITY; } diff --git a/src/main/resources/assets/refinedstorage/lang/en_US.lang b/src/main/resources/assets/refinedstorage/lang/en_US.lang index ee2d2ea06..15c48ddc0 100755 --- a/src/main/resources/assets/refinedstorage/lang/en_US.lang +++ b/src/main/resources/assets/refinedstorage/lang/en_US.lang @@ -123,6 +123,7 @@ sidebutton.refinedstorage:grid.sorting.direction.1=Descending sidebutton.refinedstorage:grid.sorting.type=Sorting Type sidebutton.refinedstorage:grid.sorting.type.0=Quantity sidebutton.refinedstorage:grid.sorting.type.1=Name +sidebutton.refinedstorage:grid.sorting.type.2=ID sidebutton.refinedstorage:grid.search_box_mode=Search Box Mode sidebutton.refinedstorage:grid.search_box_mode.0=Normal sidebutton.refinedstorage:grid.search_box_mode.1=Normal (autoselected)