ConsoleRunnable class

Пакет: com.hypixel.hytale.server.core.console

Файл: com/hypixel/hytale/server/core/console/ConsoleModule.java

implements: Runnable

Поля (9)

МодификаторыТипИмя
break
private final ConsoleSender consoleSender
private final Thread consoleThread
private final LineReader lineReader
String var1
boolean var2
String var3
var3
var3

Методы (3)

МодификаторыВозвратСигнатура
if if(var3 == null)
public void interruptpublic void interrupt()
public void runpublic void run()

Исходный код

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

class="kw">import com.hypixel.hytale.common.plugin.PluginManifest;
class="kw">import com.hypixel.hytale.logger.HytaleLogger;
class="kw">import com.hypixel.hytale.logger.backend.HytaleConsole;
class="kw">import com.hypixel.hytale.server.core.Constants;
class="kw">import com.hypixel.hytale.server.core.HytaleServer;
class="kw">import com.hypixel.hytale.server.core.ShutdownReason;
class="kw">import com.hypixel.hytale.server.core.command.system.CommandManager;
class="kw">import com.hypixel.hytale.server.core.console.command.SayCommand;
class="kw">import com.hypixel.hytale.server.core.plugin.JavaPlugin;
class="kw">import com.hypixel.hytale.server.core.plugin.JavaPluginInit;
class="kw">import java.io.IOError;
class="kw">import java.io.IOException;
class="kw">import java.util.logging.Level;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;
class="kw">import org.jline.reader.EndOfFileException;
class="kw">import org.jline.reader.LineReader;
class="kw">import org.jline.reader.LineReaderBuilder;
class="kw">import org.jline.reader.UserInterruptException;
class="kw">import org.jline.reader.LineReader.Option;
class="kw">import org.jline.terminal.Terminal;
class="kw">import org.jline.terminal.TerminalBuilder;

class="kw">public class ConsoleModule class="kw">extends JavaPlugin {
   class="kw">private class="kw">static class="kw">final HytaleLogger LOGGER = HytaleLogger.forEnclosingClass();
   class="kw">public class="kw">static class="kw">final PluginManifest MANIFEST = PluginManifest.corePlugin(ConsoleModule.class).build();
   class="kw">private class="kw">static class="kw">final int DEFAULT_TERMINAL_WIDTH = 80;
   class="kw">private class="kw">static ConsoleModule instance;
   class="kw">private class="kw">static Terminal terminal;
   class="kw">private ConsoleModule.ConsoleRunnable consoleRunnable;

   class="kw">public class="kw">static ConsoleModule get() {
      class="kw">return instance;
   }

   class="kw">public ConsoleModule(@Nonnull JavaPluginInit var1) {
      super(var1);
   }

   class="kw">public class="kw">static void initializeTerminal() {
      try {
         TerminalBuilder var0 = TerminalBuilder.builder();
         if (Constants.SINGLEPLAYER) {
            var0.dumb(true);
         } else {
            var0.color(true);
         }

         terminal = var0.build();
         HytaleConsole.INSTANCE.setTerminal(terminal.getType());
      } catch (IOException var1) {
         ((HytaleLogger.Api)LOGGER.at(Level.SEVERE).withCause(var1)).log("Failed to start console reader");
      }
   }

   @Override
   class="kw">protected void setup() {
      instance = this;
      this.getCommandRegistry().registerCommand(new SayCommand());
      LineReader var1 = LineReaderBuilder.builder()
         .terminal(terminal)
         .completer(new ConsoleCommandCompleter(ConsoleSender.INSTANCE))
         .option(Option.INSERT_TAB, false)
         .build();
      String var2 = terminal.getType();
      boolean var3 = "dumb".equals(var2) || "dumb-color".equals(var2);
      if (!var3) {
         HytaleConsole.INSTANCE.setAbovePromptPrinter(var1::printAbove);
      }

      this.consoleRunnable = new ConsoleModule.ConsoleRunnable(var1, ConsoleSender.INSTANCE);
      this.getLogger().at(Level.INFO).log("Setup console with type: %s", terminal.getType());
   }

   @Override
   class="kw">protected void shutdown() {
      this.getLogger().at(Level.INFO).log("Restoring terminal...");
      HytaleConsole.INSTANCE.setAbovePromptPrinter(null);

      try {
         terminal.close();
      } catch (IOException var2) {
         ((HytaleLogger.Api)HytaleLogger.getLogger().at(Level.SEVERE).withCause(var2)).log("Failed to restore terminal!");
      }

      this.consoleRunnable.interrupt();
   }

   @Nullable
   class="kw">public Terminal getTerminal() {
      class="kw">return terminal;
   }

   class="kw">public class="kw">static int terminalWidth() {
      class="kw">return terminal != null && terminal.getWidth() > 0 ? terminal.getWidth() : 80;
   }

   class="kw">private class="kw">static class ConsoleRunnable class="kw">implements Runnable {
      class="kw">private class="kw">final LineReader lineReader;
      class="kw">private class="kw">final ConsoleSender consoleSender;
      @Nonnull
      class="kw">private class="kw">final Thread consoleThread;

      class="kw">public ConsoleRunnable(LineReader var1, ConsoleSender var2) {
         this.lineReader = var1;
         this.consoleSender = var2;
         this.consoleThread = new Thread(this, "ConsoleThread");
         this.consoleThread.setDaemon(true);
         this.consoleThread.start();
      }

      @Override
      class="kw">public void run() {
         try {
            String var1 = this.lineReader.getTerminal().getType();
            boolean var2 = "dumb".equals(var1) || "dumb-color".equals(var1);

            while (!this.consoleThread.isInterrupted()) {
               String var3 = this.lineReader.readLine(var2 ? null : "> ");
               if (var3 == null) {
                  break;
               }

               var3 = var3.trim();
               if (!var3.isEmpty() && var3.charAt(0) == '/') {
                  var3 = var3.substring(1);
               }

               CommandManager.get().handleCommand(this.consoleSender, var3);
            }
         } catch (UserInterruptException var4) {
            HytaleServer.get().shutdownServer(ShutdownReason.SIGINT);
         } catch (EndOfFileException | IOError var5) {
         }
      }

      class="kw">public void interrupt() {
         this.consoleThread.interrupt();
      }
   }
}