From 0dd41f9350a8cfcb8c1eb9e0f2027b424138ce23 Mon Sep 17 00:00:00 2001 From: dragon <52032586+eternalcomet@users.noreply.github.com> Date: Wed, 19 Apr 2023 03:19:29 +0800 Subject: [PATCH] implement getCachePath (#2121) * implement getCachePath for further use like grids cache. * Update src/main/java/emu/grasscutter/utils/FileUtils.java --------- Co-authored-by: Magix <27646710+KingRainbow44@users.noreply.github.com> --- .../emu/grasscutter/config/ConfigContainer.java | 2 ++ .../java/emu/grasscutter/utils/FileUtils.java | 5 +++++ src/main/java/emu/grasscutter/utils/Language.java | 15 +++++---------- 3 files changed, 12 insertions(+), 10 deletions(-) diff --git a/src/main/java/emu/grasscutter/config/ConfigContainer.java b/src/main/java/emu/grasscutter/config/ConfigContainer.java index 4502fc568..3f3b361a9 100644 --- a/src/main/java/emu/grasscutter/config/ConfigContainer.java +++ b/src/main/java/emu/grasscutter/config/ConfigContainer.java @@ -8,6 +8,7 @@ import emu.grasscutter.Grasscutter.ServerRunMode; import emu.grasscutter.utils.JsonUtils; import lombok.NoArgsConstructor; +import java.net.URI; import java.util.Set; import java.lang.reflect.Field; import java.util.Arrays; @@ -88,6 +89,7 @@ public class ConfigContainer { public String packets = "./packets/"; public String scripts = "resources:Scripts/"; public String plugins = "./plugins/"; + public String cache = "./cache/"; // UNUSED (potentially added later?) // public String dumps = "./dumps/"; diff --git a/src/main/java/emu/grasscutter/utils/FileUtils.java b/src/main/java/emu/grasscutter/utils/FileUtils.java index 9a6ca895f..4c7897042 100644 --- a/src/main/java/emu/grasscutter/utils/FileUtils.java +++ b/src/main/java/emu/grasscutter/utils/FileUtils.java @@ -21,6 +21,7 @@ public final class FileUtils { private static final Path DATA_USER_PATH = Path.of(Grasscutter.config.folderStructure.data); private static final Path PACKETS_PATH = Path.of(Grasscutter.config.folderStructure.packets); private static final Path PLUGINS_PATH = Path.of(Grasscutter.config.folderStructure.plugins); + private static final Path CACHE_PATH = Path.of(Grasscutter.config.folderStructure.cache); private static final Path RESOURCES_PATH; private static final Path SCRIPTS_PATH; private static final String[] TSJ_JSON_TSV = {"tsj", "json", "tsv"}; @@ -138,6 +139,10 @@ public final class FileUtils { return DATA_USER_PATH.resolve(path); } + public static Path getCachePath(String path) { + return CACHE_PATH.resolve(path); + } + public static Path getPacketPath(String path) { return PACKETS_PATH.resolve(path); } diff --git a/src/main/java/emu/grasscutter/utils/Language.java b/src/main/java/emu/grasscutter/utils/Language.java index 94600ec5a..c93543395 100644 --- a/src/main/java/emu/grasscutter/utils/Language.java +++ b/src/main/java/emu/grasscutter/utils/Language.java @@ -2,6 +2,7 @@ package emu.grasscutter.utils; import static emu.grasscutter.config.Configuration.FALLBACK_LANGUAGE; import static emu.grasscutter.utils.FileUtils.getResourcePath; +import static emu.grasscutter.utils.FileUtils.getCachePath; import com.google.gson.JsonElement; import com.google.gson.JsonObject; @@ -37,8 +38,7 @@ public final class Language { private static final Map cachedLanguages = new ConcurrentHashMap<>(); private static final int TEXTMAP_CACHE_VERSION = 0x9CCACE04; private static final Pattern textMapKeyValueRegex = Pattern.compile("\"(\\d+)\": \"(.+)\""); - private static final Path TEXTMAP_CACHE_PATH = - Path.of(Utils.toFilePath("cache/TextMapCache.bin")); + private static final Path TEXTMAP_CACHE_PATH = getCachePath("TextMap/TextMapCache.bin"); private static boolean scannedTextmaps = false; // Ensure that we don't infinitely rescan on cache misses that don't exist private static Int2ObjectMap textMapStrings; @@ -289,14 +289,9 @@ public final class Language { } private static void saveTextMapsCache(Int2ObjectMap input) throws IOException { - try { - Files.createDirectory(Path.of("cache")); - } catch (FileAlreadyExistsException ignored) { - } - try (ObjectOutputStream file = - new ObjectOutputStream( - new BufferedOutputStream( - Files.newOutputStream(TEXTMAP_CACHE_PATH, StandardOpenOption.CREATE), 0x100000))) { + Files.createDirectories(TEXTMAP_CACHE_PATH.getParent()); + try (var file = new ObjectOutputStream(new BufferedOutputStream( + Files.newOutputStream(TEXTMAP_CACHE_PATH, StandardOpenOption.CREATE), 0x100000))) { file.writeInt(TEXTMAP_CACHE_VERSION); file.writeObject(input); }