diff --git a/CHANGELOG.md b/CHANGELOG.md index 3df9f81bd..c329b7246 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,8 +6,9 @@ **Features** - Added shift clicking support to every inventory (for upgrades etc) +- Added grid filtering options: @ for searching on mod items, # for searching on tooltips - Tweaked some recipes -- Tweaked some energy usage in machines +- Tweaked energy usage in some machines ### 0.7.13 **Features** diff --git a/src/main/java/refinedstorage/gui/GuiGrid.java b/src/main/java/refinedstorage/gui/GuiGrid.java index 6d5c9023e..7213312a6 100755 --- a/src/main/java/refinedstorage/gui/GuiGrid.java +++ b/src/main/java/refinedstorage/gui/GuiGrid.java @@ -6,9 +6,11 @@ import net.minecraft.client.gui.GuiTextField; import net.minecraft.client.renderer.GlStateManager; import net.minecraft.client.renderer.RenderHelper; import net.minecraft.init.SoundEvents; +import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.util.math.BlockPos; import net.minecraftforge.fml.common.FMLCommonHandler; +import org.apache.commons.lang3.StringUtils; import refinedstorage.RefinedStorage; import refinedstorage.block.EnumGridType; import refinedstorage.container.ContainerGrid; @@ -126,13 +128,45 @@ public class GuiGrid extends GuiBase { if (grid.isConnected()) { items.addAll(grid.getItems()); - if (!searchField.getText().trim().isEmpty()) { + String query = searchField.getText().trim().toLowerCase(); + + if (!query.isEmpty()) { Iterator t = items.iterator(); while (t.hasNext()) { ClientItem item = t.next(); - if (!item.getStack().getDisplayName().toLowerCase().contains(searchField.getText().toLowerCase())) { + if (query.startsWith("@")) { + String[] parts = query.split(" "); + + String modId = parts[0].substring(1); + String modIdFromItem = Item.REGISTRY.getNameForObject(item.getStack().getItem()).getResourceDomain(); + + if (!modIdFromItem.contains(modId)) { + t.remove(); + } else if (parts.length >= 2) { + StringBuilder itemFromMod = new StringBuilder(); + + for (int i = 1; i < parts.length; ++i) { + itemFromMod.append(parts[i]); + + if (i != parts.length - 1) { + itemFromMod.append(" "); + } + } + + if (!item.getStack().getDisplayName().toLowerCase().contains(itemFromMod.toString())) { + t.remove(); + } + } + } else if (query.startsWith("#")) { + String tooltip = query.substring(1); + String tooltipFromItem = StringUtils.join(item.getStack().getTooltip(container.getPlayer(), true), "\n"); + + if (!tooltipFromItem.contains(tooltip)) { + t.remove(); + } + } else if (!item.getStack().getDisplayName().toLowerCase().contains(query)) { t.remove(); } }