further optimize lang reloading
This commit is contained in:
parent
b5073d0361
commit
09ab1e6477
@ -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();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user