further optimize lang reloading

This commit is contained in:
xGinko 2024-03-28 13:30:59 +01:00
parent b5073d0361
commit 09ab1e6477

View File

@ -24,6 +24,8 @@ 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.stream.Stream;
import java.util.zip.ZipEntry;
public final class VillagerOptimizer extends JavaPlugin { public final class VillagerOptimizer extends JavaPlugin {
@ -160,60 +162,39 @@ public final class VillagerOptimizer extends JavaPlugin {
} }
} }
private void reloadLang(boolean startup) { private void reloadLang(boolean logFancy) {
languageCacheMap = new HashMap<>(); languageCacheMap = new HashMap<>();
try { try {
File langDirectory = new File(getDataFolder() + File.separator + "lang"); for (String localeString : getAvailableTranslations()) {
Files.createDirectories(langDirectory.toPath()); if (logFancy) logger.info(Component.text("").style(GenericUtil.STYLE)
SortedSet<String> locales = new TreeSet<>();
locales.addAll(getDefaultLocales(getFile()));
locales.addAll(getPresentLocales(langDirectory));
for (String localeString : locales) {
if (startup) logger.info(
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))
.append(Component.text("").style(GenericUtil.STYLE))); .append(Component.text("").style(GenericUtil.STYLE)));
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));
} }
} catch (Exception e) { } catch (Throwable t) {
if (startup) logger.error( if (logFancy) logger.error(Component.text("").style(GenericUtil.STYLE)
Component.text("").style(GenericUtil.STYLE)
.append(Component.text("LANG ERROR").color(NamedTextColor.RED).decorate(TextDecoration.BOLD)) .append(Component.text("LANG ERROR").color(NamedTextColor.RED).decorate(TextDecoration.BOLD))
.append(Component.text("").style(GenericUtil.STYLE)), e); .append(Component.text("").style(GenericUtil.STYLE)), t);
else logger.error("Error loading language files!", e); else logger.error("Error loading language files!", t);
} }
} }
private static final Pattern langPattern = Pattern.compile("([a-z]{1,3}_[a-z]{1,3})(\\.yml)", Pattern.CASE_INSENSITIVE); private @NotNull SortedSet<String> getAvailableTranslations() {
try (final JarFile pluginJar = new JarFile(getFile())) {
private @NotNull Set<String> getDefaultLocales(File jarFile) { final File langDirectory = new File(getDataFolder() + "/lang");
try (final JarFile pluginJarFile = new JarFile(jarFile)) { Files.createDirectories(langDirectory.toPath());
return pluginJarFile.stream() final Pattern langPattern = Pattern.compile("([a-z]{1,3}_[a-z]{1,3})(\\.yml)", Pattern.CASE_INSENSITIVE);
.map(zipEntry -> { return Stream.concat(pluginJar.stream().map(ZipEntry::getName), Arrays.stream(langDirectory.listFiles()).map(File::getName))
Matcher matcher = langPattern.matcher(zipEntry.getName()); .map(name -> {
final Matcher matcher = langPattern.matcher(name);
return matcher.find() ? matcher.group(1) : null; return matcher.find() ? matcher.group(1) : null;
}) })
.filter(Objects::nonNull) .filter(Objects::nonNull)
.collect(Collectors.toSet()); .collect(Collectors.toCollection(TreeSet::new));
} catch (Throwable t) { } catch (Throwable t) {
logger.error("Failed getting default lang files!", t); logger.error("Failed querying for available translations!", t);
return Collections.emptySet(); return new TreeSet<>();
}
}
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();
} }
} }
} }