From 6e36985e868ac46523220038d1820b729418236d Mon Sep 17 00:00:00 2001 From: Glavo Date: Wed, 20 May 2026 20:20:20 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=97=A0=E6=B3=95=E7=94=A8?= =?UTF-8?q?=E4=B8=AD=E6=96=87=E6=90=9C=E7=B4=A2=E6=B8=B8=E6=88=8F=E5=86=85?= =?UTF-8?q?=E5=AE=B9=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../game/LocalizedRemoteModRepository.java | 29 ++++++++++++------- 1 file changed, 19 insertions(+), 10 deletions(-) diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/game/LocalizedRemoteModRepository.java b/HMCL/src/main/java/org/jackhuang/hmcl/game/LocalizedRemoteModRepository.java index 29b8fb5a13d..8dfa37de00b 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/game/LocalizedRemoteModRepository.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/game/LocalizedRemoteModRepository.java @@ -47,33 +47,42 @@ public SearchResult search(DownloadProvider downloadProvider, String gameVersion return getBackedRemoteModRepository().search(downloadProvider, gameVersion, category, pageOffset, pageSize, searchFilter, sort, sortOrder); } - Set englishSearchFiltersSet = new HashSet<>(INITIAL_CAPACITY); + Set englishSearchFiltersSet = new LinkedHashSet<>(INITIAL_CAPACITY); int count = 0; for (ModTranslations.Mod mod : ModTranslations.getTranslationsByRepositoryType(getType()).searchMod(searchFilter)) { - for (String englishWord : StringUtils.tokenize(StringUtils.isNotBlank(mod.getSubname()) ? mod.getSubname() : mod.getName())) { - if (englishSearchFiltersSet.contains(englishWord)) { - continue; - } - - englishSearchFiltersSet.add(englishWord); + String englishSearchFilter = String.join(" ", StringUtils.tokenize(StringUtils.isNotBlank(mod.getSubname()) ? mod.getSubname() : mod.getName())); + if (StringUtils.isNotBlank(englishSearchFilter)) { + englishSearchFiltersSet.add(englishSearchFilter); } count++; if (count >= 3) break; } + if (englishSearchFiltersSet.isEmpty()) { + return getBackedRemoteModRepository().search(downloadProvider, gameVersion, category, pageOffset, pageSize, searchFilter, sort, sortOrder); + } + RemoteMod[] searchResultArray = new RemoteMod[pageSize]; int totalPages, chineseIndex = 0, englishIndex = pageSize - 1; { - SearchResult searchResult = getBackedRemoteModRepository().search(downloadProvider, gameVersion, category, pageOffset, pageSize, String.join(" ", englishSearchFiltersSet), getBackedRemoteModRepositorySortOrder(), sortOrder); - for (Iterator iterator = searchResult.getUnsortedResults().iterator(); iterator.hasNext(); ) { + SearchResult searchResult = null; + List remoteMods = List.of(); + for (String englishSearchFilter : englishSearchFiltersSet) { + searchResult = getBackedRemoteModRepository().search(downloadProvider, gameVersion, category, pageOffset, pageSize, englishSearchFilter, getBackedRemoteModRepositorySortOrder(), sortOrder); + remoteMods = searchResult.getUnsortedResults().toList(); + if (!remoteMods.isEmpty()) { + break; + } + } + + for (RemoteMod remoteMod : remoteMods) { if (chineseIndex > englishIndex) { LOG.warning("Too many search results! Are the backed remote mod repository broken? Or are the API broken?"); continue; } - RemoteMod remoteMod = iterator.next(); ModTranslations.Mod chineseTranslation = ModTranslations.getTranslationsByRepositoryType(getType()).getModByCurseForgeId(remoteMod.getSlug()); if (chineseTranslation != null && !StringUtils.isBlank(chineseTranslation.getName()) && StringUtils.containsChinese(chineseTranslation.getName())) { searchResultArray[chineseIndex++] = remoteMod;