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;
   }
}