optimize reloadlang method

This commit is contained in:
xGinko 2024-03-27 12:40:58 +01:00
parent 0afb51b54d
commit f4d6fac8c9
2 changed files with 36 additions and 31 deletions

12
pom.xml
View File

@ -130,18 +130,18 @@
<artifactId>adventure-text-serializer-ansi</artifactId> <artifactId>adventure-text-serializer-ansi</artifactId>
<version>4.16.0</version> <version>4.16.0</version>
</dependency> </dependency>
<!-- Adventure ComponentLogger for colorful slf4j logging -->
<dependency>
<groupId>net.kyori</groupId>
<artifactId>adventure-text-logger-slf4j</artifactId>
<version>4.16.0</version>
</dependency>
<!-- Adventure plaintext serializer for reading unstyled content of components --> <!-- Adventure plaintext serializer for reading unstyled content of components -->
<dependency> <dependency>
<groupId>net.kyori</groupId> <groupId>net.kyori</groupId>
<artifactId>adventure-text-serializer-plain</artifactId> <artifactId>adventure-text-serializer-plain</artifactId>
<version>4.16.0</version> <version>4.16.0</version>
</dependency> </dependency>
<!-- Adventure ComponentLogger for colorful slf4j logging -->
<dependency>
<groupId>net.kyori</groupId>
<artifactId>adventure-text-logger-slf4j</artifactId>
<version>4.16.0</version>
</dependency>
<!-- Bukkit bStats --> <!-- Bukkit bStats -->
<dependency> <dependency>
<groupId>org.bstats</groupId> <groupId>org.bstats</groupId>

View File

@ -18,14 +18,12 @@ import org.bukkit.plugin.java.JavaPlugin;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import java.io.File; import java.io.File;
import java.io.IOException;
import java.nio.file.Files; import java.nio.file.Files;
import java.util.*; import java.util.*;
import java.util.jar.JarFile; import java.util.jar.JarFile;
import java.util.regex.Matcher; import java.util.regex.Matcher;
import java.util.regex.Pattern; import java.util.regex.Pattern;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import java.util.zip.ZipEntry;
public final class VillagerOptimizer extends JavaPlugin { public final class VillagerOptimizer extends JavaPlugin {
@ -167,8 +165,10 @@ public final class VillagerOptimizer extends JavaPlugin {
try { try {
File langDirectory = new File(getDataFolder() + File.separator + "lang"); File langDirectory = new File(getDataFolder() + File.separator + "lang");
Files.createDirectories(langDirectory.toPath()); Files.createDirectories(langDirectory.toPath());
for (String fileName : getDefaultLanguageFiles()) { Set<String> locales = new HashSet<>();
final String localeString = fileName.substring(fileName.lastIndexOf('/') + 1, fileName.lastIndexOf('.')); locales.addAll(getDefaultLocales(getFile()));
locales.addAll(getPresentLocales(langDirectory));
for (String localeString : locales) {
if (startup) logger.info( if (startup) logger.info(
Component.text("").style(GenericUtil.STYLE) Component.text("").style(GenericUtil.STYLE)
.append(Component.text(" "+localeString).color(NamedTextColor.WHITE).decorate(TextDecoration.BOLD)) .append(Component.text(" "+localeString).color(NamedTextColor.WHITE).decorate(TextDecoration.BOLD))
@ -176,21 +176,6 @@ public final class VillagerOptimizer extends JavaPlugin {
else logger.info(String.format("Found language file for %s", localeString)); else logger.info(String.format("Found language file for %s", localeString));
languageCacheMap.put(localeString, new LanguageCache(localeString)); languageCacheMap.put(localeString, new LanguageCache(localeString));
} }
final Pattern langPattern = Pattern.compile("([a-z]{1,3}_[a-z]{1,3})(\\.yml)", Pattern.CASE_INSENSITIVE);
for (File langFile : langDirectory.listFiles()) {
final Matcher langMatcher = langPattern.matcher(langFile.getName());
if (langMatcher.find()) {
String localeString = langMatcher.group(1).toLowerCase();
if (!languageCacheMap.containsKey(localeString)) { // make sure it wasn't a default file that we already loaded
if (startup) logger.info(
Component.text("").style(GenericUtil.STYLE)
.append(Component.text(" "+localeString).color(NamedTextColor.WHITE).decorate(TextDecoration.BOLD))
.append(Component.text("").style(GenericUtil.STYLE)));
else logger.info(String.format("Found language file for %s", localeString));
languageCacheMap.put(localeString, new LanguageCache(localeString));
}
}
}
} catch (Exception e) { } catch (Exception e) {
if (startup) logger.error( if (startup) logger.error(
Component.text("").style(GenericUtil.STYLE) Component.text("").style(GenericUtil.STYLE)
@ -200,14 +185,34 @@ public final class VillagerOptimizer extends JavaPlugin {
} }
} }
private @NotNull Set<String> getDefaultLanguageFiles() { private static final Pattern langPattern = Pattern.compile("([a-z]{1,3}_[a-z]{1,3})(\\.yml)", Pattern.CASE_INSENSITIVE);
try (final JarFile pluginJarFile = new JarFile(this.getFile())) {
private @NotNull Set<String> getDefaultLocales(File jarFile) {
try (final JarFile pluginJarFile = new JarFile(jarFile)) {
return pluginJarFile.stream() return pluginJarFile.stream()
.map(ZipEntry::getName) .map(zipEntry -> {
.filter(name -> name.startsWith("lang/") && name.endsWith(".yml")) Matcher matcher = langPattern.matcher(zipEntry.getName());
return matcher.find() ? matcher.group(1) : null;
})
.filter(Objects::nonNull)
.collect(Collectors.toSet()); .collect(Collectors.toSet());
} catch (IOException e) { } catch (Throwable t) {
logger.error("Failed getting default lang files!", e); logger.error("Failed getting default lang files!", t);
return Collections.emptySet();
}
}
private @NotNull Set<String> getPresentLocales(File folder) {
try {
return Arrays.stream(Objects.requireNonNull(folder.listFiles()))
.map(file -> {
Matcher matcher = langPattern.matcher(file.getName());
return matcher.find() ? matcher.group(1) : null;
})
.filter(Objects::nonNull)
.collect(Collectors.toSet());
} catch (Throwable t) {
logger.error("Failed getting lang files from plugin folder!", t);
return Collections.emptySet(); return Collections.emptySet();
} }
} }