Node class

Пакет: com.hypixel.hytale.builtin.commandmacro

Файл: com/hypixel/hytale/builtin/commandmacro/MacroCommandTreeBuilder.java

Поля (4)

МодификаторыТипИмя
final Map<String, MacroCommandTreeBuilder.Node> children
final String fullPath
MacroCommandBuilder macro
final String token

Исходный код

Показать/скрыть
class="kw">package com.hypixel.hytale.builtin.commandmacro;

class="kw">import com.hypixel.hytale.logger.HytaleLogger;
class="kw">import com.hypixel.hytale.server.core.command.system.AbstractCommand;
class="kw">import java.util.Collection;
class="kw">import java.util.LinkedHashMap;
class="kw">import java.util.Locale;
class="kw">import java.util.Map;
class="kw">import java.util.logging.Level;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;

class="kw">final class MacroCommandTreeBuilder {
   @Nonnull
   class="kw">private class="kw">static class="kw">final HytaleLogger LOGGER = HytaleLogger.forEnclosingClass();

   class="kw">private MacroCommandTreeBuilder() {
   }

   @Nullable
   class="kw">static String rootTokenOf(@Nonnull MacroCommandBuilder var0) {
      String[] var1 = var0.getPathTokens();
      class="kw">return var1 != null && var1.length != 0 ? var1[0].toLowerCase(Locale.ROOT) : null;
   }

   @Nullable
   class="kw">static AbstractCommand build(@Nonnull String var0, @Nonnull Collection<MacroCommandBuilder> var1) {
      MacroCommandTreeBuilder.Node var2 = new MacroCommandTreeBuilder.Node(var0, var0);

      for (MacroCommandBuilder var4 : var1) {
         String[] var5 = var4.getPathTokens();
         if (var5 == null) {
            if (var4.getName() != null) {
               LOGGER.at(Level.WARNING)
                  .log("Skipping macro command with invalid Name (must be non-blank, single-space-separated tokens): '%s'", var4.getName());
            }
         } else if (var5[0].toLowerCase(Locale.ROOT).equals(var0)) {
            insert(var2, var4, var5);
         }
      }

      class="kw">return var2.macro == null && var2.children.isEmpty() ? null : toCommand(var2);
   }

   class="kw">private class="kw">static void insert(@Nonnull MacroCommandTreeBuilder.Node var0, @Nonnull MacroCommandBuilder var1, @Nonnull String[] var2) {
      MacroCommandTreeBuilder.Node var3 = var0;
      StringBuilder var4 = new StringBuilder(var2[0].toLowerCase(Locale.ROOT));

      for (int var5 = 1; var5 < var2.length; var5++) {
         String var6 = var2[var5].toLowerCase(Locale.ROOT);
         var4.append(' ').append(var6);
         var3 = var3.children.computeIfAbsent(var6, var1x -> new MacroCommandTreeBuilder.Node(var1x, var4.toString()));
      }

      if (var3.macro != null) {
         LOGGER.at(Level.WARNING)
            .log("Duplicate macro command path '%s' (asset '%s'); ignoring duplicate, keeping the first definition.", var3.fullPath, var1.getId());
      } else {
         var3.macro = var1;
      }
   }

   @Nonnull
   class="kw">private class="kw">static AbstractCommand toCommand(@Nonnull MacroCommandTreeBuilder.Node var0) {
      AbstractCommand var1 = null;
      if (var0.macro != null) {
         try {
            var1 = var0.macro.createBase(var0.token, var0.fullPath);
         } catch (RuntimeException var4) {
            ((HytaleLogger.Api)LOGGER.at(Level.WARNING).withCause(var4))
               .log("Failed to construct macro command '%s' (asset '%s'); leaving path as a passthrough collection.", var0.fullPath, var0.macro.getId());
         }
      }

      if (var1 == null) {
         var1 = new MacroCommandCollection(var0.token);
      }

      for (MacroCommandTreeBuilder.Node var3 : var0.children.values()) {
         var1.addSubCommand(toCommand(var3));
      }

      class="kw">return var1;
   }

   class="kw">private class="kw">static class="kw">final class Node {
      @Nonnull
      class="kw">final String token;
      @Nonnull
      class="kw">final String fullPath;
      @Nullable
      MacroCommandBuilder macro;
      @Nonnull
      class="kw">final Map<String, MacroCommandTreeBuilder.Node> children = new LinkedHashMap<>();

      Node(@Nonnull String var1, @Nonnull String var2) {
         this.token = var1;
         this.fullPath = var2;
      }
   }
}