From c00677a0ad4fbbe58cc24037291bd06b0c98268b Mon Sep 17 00:00:00 2001 From: CiiLu <109708109+CiiLu@users.noreply.github.com> Date: Wed, 12 Aug 2026 12:37:38 +0800 Subject: [PATCH 1/7] =?UTF-8?q?(55)=20=E5=8D=83=E8=BD=BD=E6=B3=A8=E8=BF=B0?= =?UTF-8?q?=E4=B8=80=E8=89=98=E4=B8=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../org/jackhuang/hmcl/ui/download/DownloadPage.java | 10 +++------- .../org/jackhuang/hmcl/ui/instances/Instances.java | 10 ++-------- .../main/java/org/jackhuang/hmcl/ui/main/MainPage.java | 4 +--- .../java/org/jackhuang/hmcl/upgrade/UpdateHandler.java | 4 +--- 4 files changed, 7 insertions(+), 21 deletions(-) diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/download/DownloadPage.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/download/DownloadPage.java index e961c901bfd..5fde19f4267 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/download/DownloadPage.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/download/DownloadPage.java @@ -44,8 +44,8 @@ import org.jackhuang.hmcl.ui.decorator.DecoratorAnimatedPage; import org.jackhuang.hmcl.ui.decorator.DecoratorPage; import org.jackhuang.hmcl.ui.instances.DownloadListPage; -import org.jackhuang.hmcl.ui.instances.HMCLLocalizedDownloadListPage; import org.jackhuang.hmcl.ui.instances.GameInstancePage; +import org.jackhuang.hmcl.ui.instances.HMCLLocalizedDownloadListPage; import org.jackhuang.hmcl.ui.instances.Instances; import org.jackhuang.hmcl.ui.wizard.Navigation; import org.jackhuang.hmcl.ui.wizard.WizardController; @@ -170,12 +170,8 @@ public static void download(DownloadProvider downloadProvider, HMCLGameRepositor task.setName(file.name()); return task; }).whenComplete(Schedulers.javafx(), exception -> { - if (exception != null) { - if (exception instanceof CancellationException) { - Controllers.showToast(i18n("message.cancelled")); - } else { - Controllers.dialog(DownloadProviders.localizeErrorMessage(exception), i18n("install.failed.downloading"), MessageDialogPane.MessageType.ERROR); - } + if (exception != null && !(exception instanceof CancellationException)) { + Controllers.dialog(DownloadProviders.localizeErrorMessage(exception), i18n("install.failed.downloading"), MessageDialogPane.MessageType.ERROR); } else { Controllers.showToast(i18n("install.success")); } diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/instances/Instances.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/instances/Instances.java index 4d62e3263b3..4a21f09d365 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/instances/Instances.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/instances/Instances.java @@ -28,11 +28,7 @@ import org.jackhuang.hmcl.download.game.GameAssetDownloadTask; import org.jackhuang.hmcl.download.game.GameDownloadTask; import org.jackhuang.hmcl.download.game.GameLibrariesTask; -import org.jackhuang.hmcl.game.GameInstanceID; -import org.jackhuang.hmcl.game.GameInstanceManifest; -import org.jackhuang.hmcl.game.HMCLGameRepository; -import org.jackhuang.hmcl.game.LauncherHelper; -import org.jackhuang.hmcl.game.QuickPlayOption; +import org.jackhuang.hmcl.game.*; import org.jackhuang.hmcl.setting.*; import org.jackhuang.hmcl.task.FileDownloadTask; import org.jackhuang.hmcl.task.Schedulers; @@ -106,9 +102,7 @@ public static void downloadModpackImpl(DownloadProvider downloadProvider, HMCLGa if (StringUtils.isNotBlank(mod.iconUrl())) installWizardProvider.setIconUrl(mod.iconUrl()); Controllers.getDecorator().startWizard(installWizardProvider); - } else if (e instanceof CancellationException) { - Controllers.showToast(i18n("message.cancelled")); - } else { + } else if (!(e instanceof CancellationException)) { Controllers.dialog( i18n("install.failed.downloading.detail", file.file().url()) + "\n" + StringUtils.getStackTrace(e), i18n("download.failed.no_code"), MessageDialogPane.MessageType.ERROR); diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/main/MainPage.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/main/MainPage.java index 72cc6dea4bf..81577186c57 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/main/MainPage.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/main/MainPage.java @@ -380,9 +380,7 @@ private void launchNoGame() { if (exception == null) { GameDirectoryManager.getSelectedRepository().setSelectedInstance(instanceHolder.value); launch(); - } else if (exception instanceof CancellationException) { - Controllers.showToast(i18n("message.cancelled")); - } else { + } else if (!(exception instanceof CancellationException)) { LOG.warning("Failed to install game", exception); Controllers.dialog(StringUtils.getStackTrace(exception), i18n("install.failed"), diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/upgrade/UpdateHandler.java b/HMCL/src/main/java/org/jackhuang/hmcl/upgrade/UpdateHandler.java index 4688264a03c..444da330c00 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/upgrade/UpdateHandler.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/upgrade/UpdateHandler.java @@ -159,9 +159,7 @@ public static void updateFrom(RemoteVersion version) { } else { Exception e = executor.getException(); LOG.warning("Failed to update to " + version, e); - if (e instanceof CancellationException) { - Platform.runLater(() -> Controllers.showToast(i18n("message.cancelled"))); - } else { + if (!(e instanceof CancellationException)) { Platform.runLater(() -> Controllers.dialog(e.toString(), i18n("update.failed"), MessageType.ERROR)); } } From a101aebeea4e5a5688e7cdbe431840172875bca2 Mon Sep 17 00:00:00 2001 From: CiiLu <109708109+CiiLu@users.noreply.github.com> Date: Wed, 12 Aug 2026 17:42:38 +0800 Subject: [PATCH 2/7] =?UTF-8?q?(64)=20=E5=A3=AE=E5=A3=AB=E5=8A=A8=20?= =?UTF-8?q?=E7=88=B7=E5=A8=98=E5=A6=BB=E5=84=BF=E7=AE=AA=E5=A3=B6=E9=87=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../hmcl/ui/instances/SchematicsPage.java | 21 ++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/instances/SchematicsPage.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/instances/SchematicsPage.java index b7e21447c37..afe8b20a5da 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/instances/SchematicsPage.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/instances/SchematicsPage.java @@ -54,6 +54,7 @@ import java.nio.file.NoSuchFileException; import java.nio.file.Path; import java.util.*; +import java.util.stream.Collectors; import java.util.stream.Stream; import static org.jackhuang.hmcl.ui.FXUtils.onEscPressed; @@ -161,14 +162,24 @@ public void onCreateDirectory() { return; Path parent = currentDirectory.path; + + Set existingFolders; + + try (var list = Files.list(parent)) { + existingFolders = list.map(Path::getFileName) + .map(Path::toString) + .collect(Collectors.toSet()); + } catch (IOException e) { + LOG.warning("Failed to list folders in " + parent, e); + existingFolders = Set.of(); + } + + Set finalExistingFolders = existingFolders; + Controllers.prompt( i18n("schematics.create_directory.prompt"), (result, handler) -> { Path targetDir = parent.resolve(result); - if (Files.exists(targetDir)) { - handler.reject(i18n("schematics.create_directory.failed.already_exists")); - return; - } try { Files.createDirectories(targetDir); @@ -178,7 +189,7 @@ public void onCreateDirectory() { LOG.warning("Failed to create directory: " + targetDir, e); handler.reject(i18n("schematics.create_directory.failed", targetDir)); } - }, "", new RequiredValidator(), new Validator(i18n("schematics.create_directory.failed.invalid_name"), FileUtils::isNameValid)); + }, "", new RequiredValidator(), new Validator(i18n("schematics.create_directory.failed.invalid_name"), FileUtils::isNameValid), new Validator(i18n("schematics.create_directory.failed.already_exists"), (it) -> !finalExistingFolders.contains(it))); } private DirItem loadAll(Path dir, @Nullable DirItem parent) { From ce789a1ad814fbdfb0936a965f0e633a38a93ed1 Mon Sep 17 00:00:00 2001 From: CiiLu <109708109+CiiLu@users.noreply.github.com> Date: Wed, 12 Aug 2026 17:44:36 +0800 Subject: [PATCH 3/7] hyw --- .../org/jackhuang/hmcl/ui/download/DownloadPage.java | 10 +++++++--- .../org/jackhuang/hmcl/ui/instances/Instances.java | 10 ++++++++-- .../main/java/org/jackhuang/hmcl/ui/main/MainPage.java | 4 +++- .../java/org/jackhuang/hmcl/upgrade/UpdateHandler.java | 4 +++- 4 files changed, 21 insertions(+), 7 deletions(-) diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/download/DownloadPage.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/download/DownloadPage.java index 5fde19f4267..e961c901bfd 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/download/DownloadPage.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/download/DownloadPage.java @@ -44,8 +44,8 @@ import org.jackhuang.hmcl.ui.decorator.DecoratorAnimatedPage; import org.jackhuang.hmcl.ui.decorator.DecoratorPage; import org.jackhuang.hmcl.ui.instances.DownloadListPage; -import org.jackhuang.hmcl.ui.instances.GameInstancePage; import org.jackhuang.hmcl.ui.instances.HMCLLocalizedDownloadListPage; +import org.jackhuang.hmcl.ui.instances.GameInstancePage; import org.jackhuang.hmcl.ui.instances.Instances; import org.jackhuang.hmcl.ui.wizard.Navigation; import org.jackhuang.hmcl.ui.wizard.WizardController; @@ -170,8 +170,12 @@ public static void download(DownloadProvider downloadProvider, HMCLGameRepositor task.setName(file.name()); return task; }).whenComplete(Schedulers.javafx(), exception -> { - if (exception != null && !(exception instanceof CancellationException)) { - Controllers.dialog(DownloadProviders.localizeErrorMessage(exception), i18n("install.failed.downloading"), MessageDialogPane.MessageType.ERROR); + if (exception != null) { + if (exception instanceof CancellationException) { + Controllers.showToast(i18n("message.cancelled")); + } else { + Controllers.dialog(DownloadProviders.localizeErrorMessage(exception), i18n("install.failed.downloading"), MessageDialogPane.MessageType.ERROR); + } } else { Controllers.showToast(i18n("install.success")); } diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/instances/Instances.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/instances/Instances.java index 4a21f09d365..4d62e3263b3 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/instances/Instances.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/instances/Instances.java @@ -28,7 +28,11 @@ import org.jackhuang.hmcl.download.game.GameAssetDownloadTask; import org.jackhuang.hmcl.download.game.GameDownloadTask; import org.jackhuang.hmcl.download.game.GameLibrariesTask; -import org.jackhuang.hmcl.game.*; +import org.jackhuang.hmcl.game.GameInstanceID; +import org.jackhuang.hmcl.game.GameInstanceManifest; +import org.jackhuang.hmcl.game.HMCLGameRepository; +import org.jackhuang.hmcl.game.LauncherHelper; +import org.jackhuang.hmcl.game.QuickPlayOption; import org.jackhuang.hmcl.setting.*; import org.jackhuang.hmcl.task.FileDownloadTask; import org.jackhuang.hmcl.task.Schedulers; @@ -102,7 +106,9 @@ public static void downloadModpackImpl(DownloadProvider downloadProvider, HMCLGa if (StringUtils.isNotBlank(mod.iconUrl())) installWizardProvider.setIconUrl(mod.iconUrl()); Controllers.getDecorator().startWizard(installWizardProvider); - } else if (!(e instanceof CancellationException)) { + } else if (e instanceof CancellationException) { + Controllers.showToast(i18n("message.cancelled")); + } else { Controllers.dialog( i18n("install.failed.downloading.detail", file.file().url()) + "\n" + StringUtils.getStackTrace(e), i18n("download.failed.no_code"), MessageDialogPane.MessageType.ERROR); diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/main/MainPage.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/main/MainPage.java index 81577186c57..72cc6dea4bf 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/main/MainPage.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/main/MainPage.java @@ -380,7 +380,9 @@ private void launchNoGame() { if (exception == null) { GameDirectoryManager.getSelectedRepository().setSelectedInstance(instanceHolder.value); launch(); - } else if (!(exception instanceof CancellationException)) { + } else if (exception instanceof CancellationException) { + Controllers.showToast(i18n("message.cancelled")); + } else { LOG.warning("Failed to install game", exception); Controllers.dialog(StringUtils.getStackTrace(exception), i18n("install.failed"), diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/upgrade/UpdateHandler.java b/HMCL/src/main/java/org/jackhuang/hmcl/upgrade/UpdateHandler.java index 444da330c00..4688264a03c 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/upgrade/UpdateHandler.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/upgrade/UpdateHandler.java @@ -159,7 +159,9 @@ public static void updateFrom(RemoteVersion version) { } else { Exception e = executor.getException(); LOG.warning("Failed to update to " + version, e); - if (!(e instanceof CancellationException)) { + if (e instanceof CancellationException) { + Platform.runLater(() -> Controllers.showToast(i18n("message.cancelled"))); + } else { Platform.runLater(() -> Controllers.dialog(e.toString(), i18n("update.failed"), MessageType.ERROR)); } } From d2a070ea8eca39bc7c2801f27ca6a3406aa31cf8 Mon Sep 17 00:00:00 2001 From: CiiLu <109708109+CiiLu@users.noreply.github.com> Date: Wed, 12 Aug 2026 22:27:27 +0800 Subject: [PATCH 4/7] qwq --- .../java/org/jackhuang/hmcl/ui/instances/SchematicsPage.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/instances/SchematicsPage.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/instances/SchematicsPage.java index afe8b20a5da..f1d4b666b87 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/instances/SchematicsPage.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/instances/SchematicsPage.java @@ -181,6 +181,11 @@ public void onCreateDirectory() { (result, handler) -> { Path targetDir = parent.resolve(result); + if (Files.exists(targetDir)) { + handler.reject(i18n("schematics.create_directory.failed.already_exists")); + return; + } + try { Files.createDirectories(targetDir); handler.resolve(); From 4ae1e96aa23ad119fed1c60055844bd0f5f32a75 Mon Sep 17 00:00:00 2001 From: Glavo Date: Thu, 13 Aug 2026 21:32:16 +0800 Subject: [PATCH 5/7] =?UTF-8?q?=E6=96=B0=E5=A2=9E=20FileNameSet=20?= =?UTF-8?q?=E7=B1=BB=E4=BB=A5=E4=BC=98=E5=8C=96=E7=9B=AE=E5=BD=95=E6=96=87?= =?UTF-8?q?=E4=BB=B6=E5=90=8D=E7=AE=A1=E7=90=86=EF=BC=8C=E5=B9=B6=E6=9B=B4?= =?UTF-8?q?=E6=96=B0=20SchematicsPage=20=E4=BB=A5=E4=BD=BF=E7=94=A8?= =?UTF-8?q?=E6=96=B0=E7=B1=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../hmcl/ui/instances/SchematicsPage.java | 23 ++--- .../org/jackhuang/hmcl/util/FileNameSet.java | 96 +++++++++++++++++++ 2 files changed, 108 insertions(+), 11 deletions(-) create mode 100644 HMCLCore/src/main/java/org/jackhuang/hmcl/util/FileNameSet.java diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/instances/SchematicsPage.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/instances/SchematicsPage.java index f1d4b666b87..b5504738055 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/instances/SchematicsPage.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/instances/SchematicsPage.java @@ -41,6 +41,7 @@ import org.jackhuang.hmcl.task.Task; import org.jackhuang.hmcl.ui.*; import org.jackhuang.hmcl.ui.construct.*; +import org.jackhuang.hmcl.util.FileNameSet; import org.jackhuang.hmcl.util.Lang; import org.jackhuang.hmcl.util.StringUtils; import org.jackhuang.hmcl.util.i18n.I18n; @@ -57,6 +58,7 @@ import java.util.stream.Collectors; import java.util.stream.Stream; +import static org.jackhuang.hmcl.ui.FXUtils.installFastTooltip; import static org.jackhuang.hmcl.ui.FXUtils.onEscPressed; import static org.jackhuang.hmcl.util.i18n.I18n.i18n; import static org.jackhuang.hmcl.util.logging.Logger.LOG; @@ -163,19 +165,14 @@ public void onCreateDirectory() { Path parent = currentDirectory.path; - Set existingFolders; - - try (var list = Files.list(parent)) { - existingFolders = list.map(Path::getFileName) - .map(Path::toString) - .collect(Collectors.toSet()); - } catch (IOException e) { + FileNameSet existingPaths; + try { + existingPaths = FileNameSet.list(parent, null); + } catch (Exception e) { LOG.warning("Failed to list folders in " + parent, e); - existingFolders = Set.of(); + existingPaths = new FileNameSet(false); } - Set finalExistingFolders = existingFolders; - Controllers.prompt( i18n("schematics.create_directory.prompt"), (result, handler) -> { @@ -194,7 +191,11 @@ public void onCreateDirectory() { LOG.warning("Failed to create directory: " + targetDir, e); handler.reject(i18n("schematics.create_directory.failed", targetDir)); } - }, "", new RequiredValidator(), new Validator(i18n("schematics.create_directory.failed.invalid_name"), FileUtils::isNameValid), new Validator(i18n("schematics.create_directory.failed.already_exists"), (it) -> !finalExistingFolders.contains(it))); + }, + "", + new RequiredValidator(), + new Validator(i18n("schematics.create_directory.failed.invalid_name"), FileUtils::isNameValid), + new Validator(i18n("schematics.create_directory.failed.already_exists"), existingPaths::notContains)); } private DirItem loadAll(Path dir, @Nullable DirItem parent) { diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/FileNameSet.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/FileNameSet.java new file mode 100644 index 00000000000..30ca4f7c7fe --- /dev/null +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/FileNameSet.java @@ -0,0 +1,96 @@ +/* + * Hello Minecraft! Launcher + * Copyright (C) 2026 huangyuhui and contributors + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package org.jackhuang.hmcl.util; + +import org.jackhuang.hmcl.util.platform.OperatingSystem; +import org.jetbrains.annotations.NotNullByDefault; +import org.jetbrains.annotations.Nullable; + +import java.io.IOException; +import java.nio.file.FileSystems; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.HashSet; +import java.util.Locale; +import java.util.function.Predicate; + +/// @author Glavo +@NotNullByDefault +public final class FileNameSet { + public static FileNameSet list(Path directory, @Nullable Predicate predicate) throws IOException { + try (var list = Files.list(directory)) { + boolean caseSensitive = OperatingSystem.CURRENT_OS == OperatingSystem.WINDOWS + && directory.getFileSystem() == FileSystems.getDefault(); + var set = new FileNameSet(caseSensitive); + + list.forEachOrdered(path -> { + if (predicate != null && predicate.test(path)) { + set.add(path.getFileName().toString()); + } + }); + + return set; + } + } + + private final boolean caseSensitive; + + private final HashSet set = new HashSet<>(); + + public FileNameSet(boolean caseSensitive) { + this.caseSensitive = caseSensitive; + } + + public boolean add(String name) { + if (caseSensitive) { + return set.add(name); + } else { + return set.add(name.toLowerCase(Locale.ROOT)); + } + } + + public boolean contains(String name) { + if (set.isEmpty()) + return false; + + if (caseSensitive) { + return set.contains(name); + } else { + return set.contains(name.toLowerCase(Locale.ROOT)); + } + } + + public boolean notContains(String name) { + return !contains(name); + } + + @Override + public int hashCode() { + return Boolean.hashCode(caseSensitive) ^ set.hashCode(); + } + + @Override + public boolean equals(Object obj) { + return this == obj || obj instanceof FileNameSet that && this.caseSensitive == that.caseSensitive && this.set.equals(that.set); + } + + @Override + public String toString() { + return set.toString(); + } +} From 16d9d3f920885a3f981dd1dd651fa2661cbd1a12 Mon Sep 17 00:00:00 2001 From: Glavo Date: Thu, 13 Aug 2026 21:36:36 +0800 Subject: [PATCH 6/7] =?UTF-8?q?=E4=BC=98=E5=8C=96=20FileNameSet=20?= =?UTF-8?q?=E7=B1=BB=E4=B8=AD=E7=9A=84=E5=A4=A7=E5=B0=8F=E5=86=99=E6=95=8F?= =?UTF-8?q?=E6=84=9F=E6=80=A7=E5=88=A4=E6=96=AD=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/org/jackhuang/hmcl/util/FileNameSet.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/FileNameSet.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/FileNameSet.java index 30ca4f7c7fe..37307e0e347 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/FileNameSet.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/FileNameSet.java @@ -34,8 +34,8 @@ public final class FileNameSet { public static FileNameSet list(Path directory, @Nullable Predicate predicate) throws IOException { try (var list = Files.list(directory)) { - boolean caseSensitive = OperatingSystem.CURRENT_OS == OperatingSystem.WINDOWS - && directory.getFileSystem() == FileSystems.getDefault(); + boolean caseSensitive = OperatingSystem.CURRENT_OS != OperatingSystem.WINDOWS + || directory.getFileSystem() != FileSystems.getDefault(); var set = new FileNameSet(caseSensitive); list.forEachOrdered(path -> { From 173072fa087e95e5c1b7dfe23db4d5891c63ed2d Mon Sep 17 00:00:00 2001 From: Glavo Date: Thu, 13 Aug 2026 21:47:36 +0800 Subject: [PATCH 7/7] =?UTF-8?q?=E4=BC=98=E5=8C=96=20FileNameSet=20?= =?UTF-8?q?=E7=B1=BB=E4=B8=AD=E7=9A=84=E6=9D=A1=E4=BB=B6=E5=88=A4=E6=96=AD?= =?UTF-8?q?=E9=80=BB=E8=BE=91=EF=BC=8C=E5=B9=B6=E6=B8=85=E7=90=86=20Schema?= =?UTF-8?q?ticsPage=20=E4=B8=AD=E7=9A=84=E6=9C=AA=E4=BD=BF=E7=94=A8?= =?UTF-8?q?=E5=AF=BC=E5=85=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/org/jackhuang/hmcl/ui/instances/SchematicsPage.java | 2 -- HMCLCore/src/main/java/org/jackhuang/hmcl/util/FileNameSet.java | 2 +- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/instances/SchematicsPage.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/instances/SchematicsPage.java index b5504738055..d0f7b4a047f 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/instances/SchematicsPage.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/instances/SchematicsPage.java @@ -55,10 +55,8 @@ import java.nio.file.NoSuchFileException; import java.nio.file.Path; import java.util.*; -import java.util.stream.Collectors; import java.util.stream.Stream; -import static org.jackhuang.hmcl.ui.FXUtils.installFastTooltip; import static org.jackhuang.hmcl.ui.FXUtils.onEscPressed; import static org.jackhuang.hmcl.util.i18n.I18n.i18n; import static org.jackhuang.hmcl.util.logging.Logger.LOG; diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/FileNameSet.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/FileNameSet.java index 37307e0e347..d8ffaabec8c 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/FileNameSet.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/FileNameSet.java @@ -39,7 +39,7 @@ public static FileNameSet list(Path directory, @Nullable Predicate var set = new FileNameSet(caseSensitive); list.forEachOrdered(path -> { - if (predicate != null && predicate.test(path)) { + if (predicate == null || predicate.test(path)) { set.add(path.getFileName().toString()); } });