diff --git a/CHANGELOG.md b/CHANGELOG.md index 56f7cf4d5..eaaa0d130 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,7 @@ ### 1.5.34 - Allow crafters to be daisy-chained (tomKPZ) - Empty patterns can no longer be inserted in the pattern result slot in the Pattern Grid with hoppers (raoulvdberge) +- Added OR search operator to the Grid with "|" (raoulvdberge) ### 1.5.33 - Added Crafter Manager (raoulvdberge) 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 d2f6290c5..bb55438da 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 @@ -104,8 +104,8 @@ public class NetworkNodeGrid extends NetworkNode implements IGridNetworkAware { // Allow in slot 0 // Disallow in slot 1 // Only allow in slot 1 when it isn't a blank pattern - // This makes it so that written patterns can be re-inserted in the slot to be overwritten again - // This makes it so that blank patterns can't be inserted through hoppers. + // This makes it so that written patterns can be re-inserted in slot 1 to be overwritten again + // This makes it so that blank patterns can't be inserted in slot 1 through hoppers. if (slot == 0 || stack.getTagCompound() != null) { return super.insertItem(slot, stack, simulate); } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/gui/grid/filtering/GridFilterOr.java b/src/main/java/com/raoulvdberge/refinedstorage/gui/grid/filtering/GridFilterOr.java new file mode 100644 index 000000000..01b2a10ec --- /dev/null +++ b/src/main/java/com/raoulvdberge/refinedstorage/gui/grid/filtering/GridFilterOr.java @@ -0,0 +1,27 @@ +package com.raoulvdberge.refinedstorage.gui.grid.filtering; + +import com.raoulvdberge.refinedstorage.gui.grid.stack.IGridStack; + +import java.util.List; +import java.util.function.Predicate; + +public class GridFilterOr implements Predicate { + private List>> orPartFilters; + + public GridFilterOr(List>> orPartFilters) { + this.orPartFilters = orPartFilters; + } + + @Override + public boolean test(IGridStack gridStack) { + for (List> orPart : orPartFilters) { + for (Predicate part : orPart) { + if (part.test(gridStack)) { + return true; + } + } + } + + return false; + } +} diff --git a/src/main/java/com/raoulvdberge/refinedstorage/gui/grid/filtering/GridFilterParser.java b/src/main/java/com/raoulvdberge/refinedstorage/gui/grid/filtering/GridFilterParser.java index 89696c203..7c075c7f7 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/gui/grid/filtering/GridFilterParser.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/gui/grid/filtering/GridFilterParser.java @@ -11,18 +11,21 @@ import java.util.function.Predicate; public final class GridFilterParser { public static List> getFilters(@Nullable IGrid grid, String query, List filters) { - List> gridFilters = new LinkedList<>(); + List> gridFilters; - for (String part : query.toLowerCase().trim().split(" ")) { - if (part.startsWith("@")) { - gridFilters.add(new GridFilterMod(part.substring(1))); - } else if (part.startsWith("#")) { - gridFilters.add(new GridFilterTooltip(part.substring(1))); - } else if (part.startsWith("$")) { - gridFilters.add(new GridFilterOreDict(part.substring(1))); - } else { - gridFilters.add(new GridFilterName(part)); + String[] orParts = query.split("\\|"); + + if (orParts.length == 1) { + gridFilters = getFilters(query); + } else { + List>> orPartFilters = new LinkedList<>(); + + for (String orPart : orParts) { + orPartFilters.add(getFilters(orPart)); } + + gridFilters = new LinkedList<>(); + gridFilters.add(new GridFilterOr(orPartFilters)); } if (grid != null) { @@ -39,4 +42,22 @@ public final class GridFilterParser { return gridFilters; } + + private static List> getFilters(String query) { + List> gridFilters = new LinkedList<>(); + + for (String part : query.toLowerCase().trim().split(" ")) { + if (part.startsWith("@")) { + gridFilters.add(new GridFilterMod(part.substring(1))); + } else if (part.startsWith("#")) { + gridFilters.add(new GridFilterTooltip(part.substring(1))); + } else if (part.startsWith("$")) { + gridFilters.add(new GridFilterOreDict(part.substring(1))); + } else { + gridFilters.add(new GridFilterName(part)); + } + } + + return gridFilters; + } }