diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/terracotta/TerracottaMetadata.java b/HMCL/src/main/java/org/jackhuang/hmcl/terracotta/TerracottaMetadata.java index b4502a9b3..b7ad8d8c4 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/terracotta/TerracottaMetadata.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/terracotta/TerracottaMetadata.java @@ -169,6 +169,9 @@ public final class TerracottaMetadata { public static void removeLegacyVersionFiles() { try (DirectoryStream terracotta = collectLegacyVersionFiles()) { + if (terracotta == null) + return; + for (Path path : terracotta) { try { FileUtils.deleteDirectory(path); @@ -183,13 +186,17 @@ public final class TerracottaMetadata { public static boolean hasLegacyVersionFiles() throws IOException { try (DirectoryStream terracotta = collectLegacyVersionFiles()) { - return terracotta.iterator().hasNext(); + return terracotta != null && terracotta.iterator().hasNext(); } } - private static DirectoryStream collectLegacyVersionFiles() throws IOException { + private static @Nullable DirectoryStream collectLegacyVersionFiles() throws IOException { + Path terracottaDir = Metadata.DEPENDENCIES_DIRECTORY.resolve("terracotta"); + if (Files.notExists(terracottaDir)) + return null; + VersionRange range = VersionNumber.atMost(LATEST); - return Files.newDirectoryStream(Metadata.DEPENDENCIES_DIRECTORY.resolve("terracotta"), path -> { + return Files.newDirectoryStream(terracottaDir, path -> { String name = FileUtils.getName(path); return !LATEST.equals(name) && range.contains(VersionNumber.asVersion(name)); });