59 lines
1.8 KiB
Java
59 lines
1.8 KiB
Java
package org.bukkit.craftbukkit.util;
|
|
|
|
import com.mojang.util.QueueLogAppender;
|
|
import java.io.IOException;
|
|
import java.io.OutputStream;
|
|
import java.util.logging.Level;
|
|
import java.util.logging.Logger;
|
|
import jline.console.ConsoleReader;
|
|
import org.bukkit.craftbukkit.Main;
|
|
import org.fusesource.jansi.Ansi;
|
|
import org.fusesource.jansi.Ansi.Erase;
|
|
|
|
public class TerminalConsoleWriterThread extends Thread {
|
|
private final ConsoleReader reader;
|
|
private final OutputStream output;
|
|
|
|
public TerminalConsoleWriterThread(OutputStream output, ConsoleReader reader) {
|
|
super("TerminalConsoleWriter");
|
|
this.output = output;
|
|
this.reader = reader;
|
|
|
|
this.setDaemon(true);
|
|
}
|
|
|
|
@Override
|
|
public void run() {
|
|
String message;
|
|
|
|
// Using name from log4j config in vanilla jar
|
|
while (true) {
|
|
message = QueueLogAppender.getNextLogEvent("TerminalConsole");
|
|
if (message == null) {
|
|
continue;
|
|
}
|
|
|
|
try {
|
|
if (Main.useJline) {
|
|
reader.print(Ansi.ansi().eraseLine(Erase.ALL).toString() + ConsoleReader.RESET_LINE);
|
|
reader.flush();
|
|
output.write(message.getBytes());
|
|
output.flush();
|
|
|
|
try {
|
|
reader.drawLine();
|
|
} catch (Throwable ex) {
|
|
reader.getCursorBuffer().clear();
|
|
}
|
|
reader.flush();
|
|
} else {
|
|
output.write(message.getBytes());
|
|
output.flush();
|
|
}
|
|
} catch (IOException ex) {
|
|
Logger.getLogger(TerminalConsoleWriterThread.class.getName()).log(Level.SEVERE, null, ex);
|
|
}
|
|
}
|
|
}
|
|
}
|