diff --git a/core-common/src/main/java/cn/hamster3/mc/plugin/core/common/util/CoreUtils.java b/core-common/src/main/java/cn/hamster3/mc/plugin/core/common/util/CoreUtils.java index 7897f39..67c26ad 100644 --- a/core-common/src/main/java/cn/hamster3/mc/plugin/core/common/util/CoreUtils.java +++ b/core-common/src/main/java/cn/hamster3/mc/plugin/core/common/util/CoreUtils.java @@ -1,6 +1,7 @@ package cn.hamster3.mc.plugin.core.common.util; import cn.hamster3.mc.plugin.core.common.config.ConfigSection; +import cn.hamster3.mc.plugin.core.common.config.YamlConfig; import com.google.gson.JsonObject; import com.zaxxer.hikari.HikariConfig; import com.zaxxer.hikari.HikariDataSource; @@ -8,42 +9,42 @@ import net.kyori.adventure.key.Key; import net.kyori.adventure.sound.Sound; import net.kyori.adventure.text.serializer.gson.GsonComponentSerializer; import net.kyori.adventure.title.Title; +import net.kyori.adventure.translation.TranslationRegistry; import org.jetbrains.annotations.NotNull; import javax.sql.DataSource; import java.io.File; import java.io.IOException; -import java.nio.file.Files; +import java.text.MessageFormat; import java.time.Duration; -import java.util.zip.ZipEntry; -import java.util.zip.ZipOutputStream; +import java.util.HashMap; +import java.util.Locale; +import java.util.Map; +import java.util.Objects; @SuppressWarnings("unused") public final class CoreUtils { private CoreUtils() { } - public static void zipCompressionFolder(@NotNull File folder, @NotNull File zipFile) throws IOException { - try (ZipOutputStream stream = new ZipOutputStream(Files.newOutputStream(zipFile.toPath()))) { - putFileToZipStream(stream, "", folder); + @NotNull + public static DataSource getDataSource(@NotNull ConfigSection datasourceConfig) { + HikariConfig hikariConfig = new HikariConfig(); + hikariConfig.setDriverClassName(datasourceConfig.getString("driver")); + hikariConfig.setJdbcUrl(datasourceConfig.getString("url")); + hikariConfig.setUsername(datasourceConfig.getString("username")); + hikariConfig.setPassword(datasourceConfig.getString("password")); + hikariConfig.setMaximumPoolSize(datasourceConfig.getInt("maximum-pool-size", 3)); + hikariConfig.setMinimumIdle(datasourceConfig.getInt("minimum-idle", 1)); + long keepAliveTime = datasourceConfig.getLong("keep-alive-time", 0); + if (keepAliveTime > 5000) { + hikariConfig.setKeepaliveTime(keepAliveTime); } - } - - public static void putFileToZipStream(@NotNull ZipOutputStream stream, @NotNull String path, @NotNull File file) throws IOException { - if (file.isDirectory()) { - File[] files = file.listFiles(); - if (files == null) { - throw new IOException(); - } - for (File subFile : files) { - putFileToZipStream(stream, path + file.getName() + "/", subFile); - } - return; - } - ZipEntry entry = new ZipEntry(path + file.getName()); - stream.putNextEntry(entry); - stream.write(Files.readAllBytes(file.toPath())); - stream.closeEntry(); + hikariConfig.setIdleTimeout(datasourceConfig.getLong("idle-timeout", 10 * 60 * 1000)); + hikariConfig.setMaxLifetime(datasourceConfig.getLong("max-lifetime", 30 * 60 * 1000)); + hikariConfig.setValidationTimeout(datasourceConfig.getLong("validation-timeout", 5000)); + hikariConfig.setPoolName(datasourceConfig.getString("name", "HamsterCore-Pool")); + return new HikariDataSource(hikariConfig); } /** @@ -125,24 +126,30 @@ public final class CoreUtils { ); } - @NotNull - public static DataSource getDataSource(@NotNull ConfigSection datasourceConfig) { - HikariConfig hikariConfig = new HikariConfig(); - hikariConfig.setDriverClassName(datasourceConfig.getString("driver")); - hikariConfig.setJdbcUrl(datasourceConfig.getString("url")); - hikariConfig.setUsername(datasourceConfig.getString("username")); - hikariConfig.setPassword(datasourceConfig.getString("password")); - hikariConfig.setMaximumPoolSize(datasourceConfig.getInt("maximum-pool-size", 3)); - hikariConfig.setMinimumIdle(datasourceConfig.getInt("minimum-idle", 1)); - long keepAliveTime = datasourceConfig.getLong("keep-alive-time", 0); - if (keepAliveTime > 5000) { - hikariConfig.setKeepaliveTime(keepAliveTime); + public static void loadTranslation(@NotNull TranslationRegistry registry, @NotNull File folder) throws IOException { + for (File subFile : Objects.requireNonNull(folder.listFiles())) { + String filename = subFile.getName().split("\\.")[0]; + String[] args = filename.split("_"); + Locale locale = new Locale.Builder().setLanguage(args[0]).setRegion(args[1]).build(); + YamlConfig config = YamlConfig.load(subFile); + Map map = loadTranslation(locale, config, ""); + registry.registerAll(locale, map); } - hikariConfig.setIdleTimeout(datasourceConfig.getLong("idle-timeout", 10 * 60 * 1000)); - hikariConfig.setMaxLifetime(datasourceConfig.getLong("max-lifetime", 30 * 60 * 1000)); - hikariConfig.setValidationTimeout(datasourceConfig.getLong("validation-timeout", 5000)); - hikariConfig.setPoolName(datasourceConfig.getString("name", "HamsterCore-Pool")); - return new HikariDataSource(hikariConfig); + } + + public static Map loadTranslation(@NotNull Locale locale, @NotNull ConfigSection config, @NotNull String prefix) { + HashMap result = new HashMap<>(); + for (Map.Entry entry : config.getMap().entrySet()) { + String key = entry.getKey(); + Object value = entry.getValue(); + if (value instanceof String) { + String string = (String) value; + result.put(prefix + key, new MessageFormat(string, locale)); + } else if (value instanceof Map) { + loadTranslation(locale, config.getSectionOrCreate(key), "$prefix$key."); + } + } + return result; } /**