GenerateI18nCommand class
Пакет: com.hypixel.hytale.server.core.modules.i18n.commands
Файл: com/hypixel/hytale/server/core/modules/i18n/commands/GenerateI18nCommand.java
extends: AbstractAsyncCommand
Поля (19)
| Модификаторы | Тип | Имя |
|---|---|---|
final |
HytaleLogger |
LOGGER |
|
TranslationMap |
var10 |
|
TranslationMap |
var11 |
|
CommandSender |
var2 |
|
Set |
var2 |
|
AssetPack |
var3 |
|
Map |
var3 |
|
Path |
var4 |
|
TranslationMap |
var4 |
|
boolean |
var5 |
|
Properties |
var5 |
|
ConcurrentHashMap |
var6 |
|
FileInputStream |
var6 |
|
String |
var7 |
|
Set |
var7 |
|
String |
var7 |
|
TranslationMap |
var8 |
|
String |
var8 |
|
Path |
var9 |
Методы (3)
| Модификаторы | Возврат | Сигнатура |
|---|---|---|
|
|
if if(var3) |
abstract |
|
super super("gen", "server.commands.i18n.gen.desc") |
private |
void |
writeTranslationMapvoid writeTranslationMap(@Nonnull Path var1, @Nonnull TranslationMap var2) |
Исходный код
Показать/скрыть
class="kw">package com.hypixel.hytale.server.core.modules.i18n.commands;
class="kw">import com.hypixel.hytale.assetstore.AssetPack;
class="kw">import com.hypixel.hytale.logger.HytaleLogger;
class="kw">import com.hypixel.hytale.server.core.HytaleServer;
class="kw">import com.hypixel.hytale.server.core.Message;
class="kw">import com.hypixel.hytale.server.core.asset.AssetModule;
class="kw">import com.hypixel.hytale.server.core.command.system.CommandContext;
class="kw">import com.hypixel.hytale.server.core.command.system.CommandSender;
class="kw">import com.hypixel.hytale.server.core.command.system.arguments.system.FlagArg;
class="kw">import com.hypixel.hytale.server.core.command.system.basecommands.AbstractAsyncCommand;
class="kw">import com.hypixel.hytale.server.core.modules.i18n.I18nModule;
class="kw">import com.hypixel.hytale.server.core.modules.i18n.event.GenerateDefaultLanguageEvent;
class="kw">import com.hypixel.hytale.server.core.modules.i18n.generator.TranslationMap;
class="kw">import java.io.BufferedWriter;
class="kw">import java.io.FileInputStream;
class="kw">import java.nio.file.Files;
class="kw">import java.nio.file.Path;
class="kw">import java.util.HashSet;
class="kw">import java.util.Map;
class="kw">import java.util.Properties;
class="kw">import java.util.Set;
class="kw">import java.util.Map.Entry;
class="kw">import java.util.concurrent.CompletableFuture;
class="kw">import java.util.concurrent.ConcurrentHashMap;
class="kw">import java.util.logging.Level;
class="kw">import javax.annotation.Nonnull;
class="kw">public class GenerateI18nCommand class="kw">extends AbstractAsyncCommand {
class="kw">public class="kw">static class="kw">final HytaleLogger LOGGER = HytaleLogger.forEnclosingClass();
class="kw">protected class="kw">final FlagArg cleanArg = this.withFlagArg("clean", "server.commands.i18n.gen.clean.desc");
class="kw">public GenerateI18nCommand() {
super("gen", "server.commands.i18n.gen.desc");
}
@Nonnull
@Override
class="kw">protected CompletableFuture<Void> executeAsync(@Nonnull CommandContext var1) {
CommandSender var2 = var1.sender();
AssetPack var3 = AssetModule.get().getBaseAssetPack();
if (var3.isImmutable()) {
var2.sendMessage(Message.translation("server.commands.i18n.gen.immutable"));
class="kw">return CompletableFuture.completedFuture(null);
} else {
Path var4 = var3.getRoot();
boolean var5 = this.cleanArg.get(var1);
ConcurrentHashMap var6 = new ConcurrentHashMap<>();
HytaleServer.get()
.getEventBus()
.<Void, GenerateDefaultLanguageEvent>dispatchFor(GenerateDefaultLanguageEvent.class)
.dispatch(new GenerateDefaultLanguageEvent(var6));
class="kw">return CompletableFuture.runAsync(() -> {
try {
for (Entry var6 : var6.entrySet()) {
String var7 = var6.getKey();
TranslationMap var8 = var6.getValue();
Path var9 = var4.resolve(I18nModule.DEFAULT_GENERATED_PATH).resolve(var7 + ".lang");
TranslationMap var10 = this.mergei18nWithOnDisk(var9, var8, var5);
var10.sortByKeyBeforeFirstDot();
this.writeTranslationMap(var9, var10);
LOGGER.at(Level.INFO).log("Wrote %s translation(s) to %s", var10.size(), var9.toAbsolutePath());
}
LOGGER.at(Level.INFO).log("Wrote %s generated translation file(s)", var6.size());
var2.sendMessage(Message.translation(var5 ? "server.commands.i18n.gen.cleaned" : "server.commands.i18n.gen.done"));
} catch (Throwable var11) {
throw new RuntimeException("Error writing generated translation file(s)", var11);
}
});
}
}
@Nonnull
class="kw">private TranslationMap mergei18nWithOnDisk(@Nonnull Path var1, @Nonnull TranslationMap var2, boolean var3) class="kw">throws Exception {
TranslationMap var4 = new TranslationMap();
if (Files.exists(var1)) {
Properties var5 = new Properties();
FileInputStream var6 = new FileInputStream(var1.toFile());
try {
var5.load(var6);
} catch (Throwable var10) {
try {
var6.close();
} catch (Throwable var9) {
var10.addSuppressed(var9);
}
throw var10;
}
var6.close();
TranslationMap var11 = new TranslationMap(var5);
if (var3) {
Set var7 = difference(var11.asMap().keySet(), var2.asMap().keySet());
var11.removeKeys(var7);
}
var4.putAbsentKeys(var11);
}
var4.putAbsentKeys(var2);
class="kw">return var4;
}
class="kw">private void writeTranslationMap(@Nonnull Path var1, @Nonnull TranslationMap var2) class="kw">throws Exception {
Files.createDirectories(var1.getParent());
Map var3 = var2.asMap();
try (BufferedWriter var4 = Files.newBufferedWriter(var1)) {
for (Entry var6 : var3.entrySet()) {
String var7 = var6.getKey();
String var8 = var6.getValue();
var4.write(var7);
var4.write(" = ");
var4.write(var8);
var4.write(System.lineSeparator());
}
}
}
@Nonnull
class="kw">private class="kw">static <T> Set<T> difference(@Nonnull Set<T> var0, @Nonnull Set<T> var1) {
Set var2 = new HashSet<>(var0);
var2.removeAll(var1);
class="kw">return var2;
}
}