From ac4c3a75014e81a8261b777098c0118322b20f62 Mon Sep 17 00:00:00 2001 From: Zkitefly <64117916+zkitefly@users.noreply.github.com> Date: Wed, 6 Aug 2025 21:02:36 +0800 Subject: [PATCH] =?UTF-8?q?=E6=A8=A1=E7=BB=84=E7=AE=A1=E7=90=86=E6=94=AF?= =?UTF-8?q?=E6=8C=81=E6=90=9C=E7=B4=A2=E6=A0=B9=E6=8D=AE=E6=9B=B4=E5=A4=9A?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E6=90=9C=E7=B4=A2=E5=86=85=E5=AE=B9=20(#3230?= =?UTF-8?q?)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Glavo --- .../hmcl/ui/versions/ModListPageSkin.java | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/ModListPageSkin.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/ModListPageSkin.java index e664d43e6..340d2ec0d 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/ModListPageSkin.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/ModListPageSkin.java @@ -62,6 +62,7 @@ import org.jackhuang.hmcl.util.io.CompressingUtils; import org.jackhuang.hmcl.util.io.FileUtils; import org.jackhuang.hmcl.util.io.NetworkUtils; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import java.nio.file.FileSystem; import java.nio.file.Files; @@ -248,23 +249,30 @@ class ModListPageSkin extends SkinBase { } else { listView.getItems().clear(); - Predicate predicate; + Predicate<@Nullable String> predicate; if (queryString.startsWith("regex:")) { try { Pattern pattern = Pattern.compile(queryString.substring("regex:".length())); - predicate = s -> pattern.matcher(s).find(); + predicate = s -> s != null && pattern.matcher(s).find(); } catch (Throwable e) { LOG.warning("Illegal regular expression", e); return; } } else { String lowerQueryString = queryString.toLowerCase(Locale.ROOT); - predicate = s -> s.toLowerCase(Locale.ROOT).contains(lowerQueryString); + predicate = s -> s != null && s.toLowerCase(Locale.ROOT).contains(lowerQueryString); } // Do we need to search in the background thread? for (ModInfoObject item : getSkinnable().getItems()) { - if (predicate.test(item.getModInfo().getFileName())) { + LocalModFile modInfo = item.getModInfo(); + if (predicate.test(modInfo.getFileName()) + || predicate.test(modInfo.getName()) + || predicate.test(modInfo.getVersion()) + || predicate.test(modInfo.getGameVersion()) + || predicate.test(modInfo.getId()) + || predicate.test(Objects.toString(modInfo.getModLoaderType())) + || predicate.test((item.getMod() != null ? item.getMod().getDisplayName() : null))) { listView.getItems().add(item); } }