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