diff --git a/CHANGELOG.md b/CHANGELOG.md index 2617e94eb..89af1b562 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,7 @@ - The Pattern Grid now switches automatically between crafting pattern and processing pattern mode when using JEI transfer (raoulvdberge) - The Pattern Grid now switches automatically between crafting pattern and processing pattern mode when re-inserting an existing Pattern (raoulvdberge) - Removed migration code for the development builds that were released on Discord (not on CurseForge). If you used the development builds and never used version 1.7 before, first switch to 1.7, open your world, modify a storage disk, and then upgrade to 1.7.1 (raoulvdberge) +- Grids now do not sort if you interact with it while holding shift (Darkere) ### 1.7 NOTE: This is an alpha release. Bugs may happen. Remember to take backups. diff --git a/src/main/java/com/raoulvdberge/refinedstorage/config/ClientConfig.java b/src/main/java/com/raoulvdberge/refinedstorage/config/ClientConfig.java index 5a24a6930..92b80b99f 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/config/ClientConfig.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/config/ClientConfig.java @@ -32,6 +32,7 @@ public class ClientConfig { private final ForgeConfigSpec.IntValue maxRowsStretch; private final ForgeConfigSpec.BooleanValue detailedTooltip; private final ForgeConfigSpec.BooleanValue largeFont; + private final ForgeConfigSpec.BooleanValue sortGrid; public Grid() { builder.push("grid"); @@ -39,6 +40,7 @@ public class ClientConfig { maxRowsStretch = builder.comment("The maximum amount of rows that the Grid can show when stretched").defineInRange("maxRowsStretch", Integer.MAX_VALUE, 3, Integer.MAX_VALUE); detailedTooltip = builder.comment("Whether the Grid should display a detailed tooltip when hovering over an item or fluid").define("detailedTooltip", true); largeFont = builder.comment("Whether the Grid should use a large font for stack quantity display").define("largeFont", false); + sortGrid = builder.comment("Whether the grid should prevent sorting while Shift is held down").define("sortGrid", true); builder.pop(); } @@ -54,6 +56,10 @@ public class ClientConfig { public boolean getLargeFont() { return largeFont.get(); } + + public boolean getSortGrid() { + return sortGrid.get(); + } } public class CrafterManager { diff --git a/src/main/java/com/raoulvdberge/refinedstorage/screen/grid/GridScreen.java b/src/main/java/com/raoulvdberge/refinedstorage/screen/grid/GridScreen.java index 2ff9e190e..bc545a756 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/screen/grid/GridScreen.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/screen/grid/GridScreen.java @@ -55,6 +55,7 @@ public class GridScreen extends BaseScreen implements IScreenInfo private TabListWidget tabs; private boolean wasConnected; + private boolean doSort; private int slotNumber; @@ -81,7 +82,7 @@ public class GridScreen extends BaseScreen implements IScreenInfo @Override protected void onPreInit() { super.onPreInit(); - + this.doSort = true; this.ySize = getTopHeight() + getBottomHeight() + (getVisibleRows() * 18); } @@ -137,7 +138,7 @@ public class GridScreen extends BaseScreen implements IScreenInfo if (!processingPattern.isChecked()) { exactPattern = addCheckBox(processingPattern.x + processingPattern.getWidth() + 5, y + getTopHeight() + (getVisibleRows() * 18) + 60, I18n.format("misc.refinedstorage.exact"), GridTile.EXACT_PATTERN.getValue(), btn -> TileDataManager.setParameter(GridTile.EXACT_PATTERN, exactPattern.isChecked())); } - + addSideButton(new TypeSideButton(this, GridTile.PROCESSING_TYPE)); } @@ -419,7 +420,9 @@ public class GridScreen extends BaseScreen implements IScreenInfo if (scrollbar.mouseClicked(mouseX, mouseY, clickedButton)) { return true; } - + if (RS.CLIENT_CONFIG.getGrid().getSortGrid()) { + doSort = !isOverSlotArea(mouseX - guiLeft, mouseY - guiTop) && !isOverCraftingOutputArea(mouseX - guiLeft, mouseY - guiTop); + } boolean clickedClear = clickedButton == 0 && isOverClear(mouseX - guiLeft, mouseY - guiTop); boolean clickedCreatePattern = clickedButton == 0 && isOverCreatePattern(mouseX - guiLeft, mouseY - guiTop); @@ -489,6 +492,13 @@ public class GridScreen extends BaseScreen implements IScreenInfo return super.mouseClicked(mouseX, mouseY, clickedButton); } + private boolean isOverCraftingOutputArea(double mouseX, double mouseY) { + if (grid.getGridType() != GridType.CRAFTING) { + return false; + } + return RenderUtils.inBounds(130, getTopHeight() + getVisibleRows() * 18 + 18, 24, 24, mouseX, mouseY); + } + @Override public void mouseMoved(double mx, double my) { scrollbar.mouseMoved(mx, my); @@ -515,6 +525,14 @@ public class GridScreen extends BaseScreen implements IScreenInfo return super.charTyped(p_charTyped_1_, p_charTyped_2_); } + @Override + public boolean keyReleased(int key, int p_223281_2_, int p_223281_3_) { + if (key == GLFW.GLFW_KEY_LEFT_SHIFT || key == GLFW.GLFW_KEY_RIGHT_SHIFT) { + view.sort(); + } + return super.keyReleased(key, p_223281_2_, p_223281_3_); + } + @Override public boolean keyPressed(int key, int scanCode, int modifiers) { if (key == GLFW.GLFW_KEY_ESCAPE) { @@ -559,4 +577,8 @@ public class GridScreen extends BaseScreen implements IScreenInfo public static IGridSorter getDefaultSorter() { return new NameGridSorter(); } + + public boolean canSort() { + return doSort || !hasShiftDown(); + } } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/screen/grid/view/BaseGridView.java b/src/main/java/com/raoulvdberge/refinedstorage/screen/grid/view/BaseGridView.java index 373bd1dbe..546e768f3 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/screen/grid/view/BaseGridView.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/screen/grid/view/BaseGridView.java @@ -40,6 +40,9 @@ public abstract class BaseGridView implements IGridView { @Override public void sort() { + if (!screen.canSort()) { + return; + } List stacks = new ArrayList<>(); if (screen.getGrid().isActive()) {