ConsoleModule class

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

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

extends: JavaPlugin

Поля (16)

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

Методы (10)

МодификаторыВозвратСигнатура
public ConsoleRunnablepublic ConsoleRunnable(LineReader var1, ConsoleSender var2)
static ConsoleModule getConsoleModule get()
if if(Constants.SINGLEPLAYER)
if if(!var3)
if if(var3 == null)
static void initializeTerminalvoid initializeTerminal()
public void interruptpublic void interrupt()
public void runpublic void run()
abstract super super(var1)
static int terminalWidthint terminalWidth()

Исходный код

Показать/скрыть
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();
      }
   }
}