LOOHP-Limbo/src/com/loohp/limbo/Console.java

312 lines
10 KiB
Java

package com.loohp.limbo;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintStream;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Date;
import java.util.Locale;
import java.util.stream.Collectors;
import com.loohp.limbo.Commands.CommandSender;
import com.loohp.limbo.GUI.ConsoleTextOutput;
import com.loohp.limbo.Utils.CustomStringUtils;
import net.md_5.bungee.api.chat.BaseComponent;
public class Console implements CommandSender {
private InputStream in;
private PrintStream out;
@SuppressWarnings("unused")
private PrintStream err;
protected PrintStream logs;
private final String CONSOLE = "CONSOLE";
public Console(InputStream in, PrintStream out, PrintStream err) throws FileNotFoundException {
String fileName = new SimpleDateFormat("yyyy'-'MM'-'dd'_'HH'-'mm'-'ss'_'zzz'.log'").format(new Date());
File dir = new File("logs");
dir.mkdirs();
File logs = new File(dir, fileName);
this.logs = new PrintStream(logs);
if (in != null) {
System.setIn(in);
this.in = System.in;
} else {
this.in = null;
}
System.setOut(new ConsoleOutputStream(out == null ? new PrintStream(new PrintStream(new OutputStream() {
@Override
public void write(int b) {
//DO NOTHING
}
})) : out, this.logs));
this.out = System.out;
System.setErr(new ConsoleErrorStream(err == null ? new PrintStream(new PrintStream(new OutputStream() {
@Override
public void write(int b) {
//DO NOTHING
}
})) : err, this.logs));
this.err = System.err;
}
public String getName() {
return CONSOLE;
}
@Override
public void sendMessage(BaseComponent component) {
sendMessage(new BaseComponent[] {component});
}
@Override
public void sendMessage(BaseComponent[] component) {
sendMessage(String.join("", Arrays.asList(component).stream().map(each -> each.toLegacyText()).collect(Collectors.toList())));
}
public boolean hasPermission(String permission) {
return Limbo.getInstance().getPermissionsManager().hasPermission(this, permission);
}
public void sendMessage(String message) {
out.println(message);
}
protected void run() {
if (in == null) {
return;
}
BufferedReader reader = new BufferedReader(new InputStreamReader(in));
while (true) {
try {
String[] input = CustomStringUtils.splitStringToArgs(reader.readLine());
Limbo.getInstance().dispatchCommand(this, input);
} catch (IOException e) {
e.printStackTrace();
}
}
}
public static class ConsoleOutputStream extends PrintStream {
private PrintStream logs;
public ConsoleOutputStream(OutputStream out, PrintStream logs) {
super(out);
this.logs = logs;
}
@Override
public PrintStream printf(Locale l, String format, Object... args) {
String date = new SimpleDateFormat("HH':'mm':'ss").format(new Date());
ConsoleTextOutput.appendText(String.format(l, "[" + date + " Info]" + format, args));
logs.printf(l, "[" + date + " Info]" + format, args);
return super.printf(l, "[" + date + " Info]" + format, args);
}
@Override
public PrintStream printf(String format, Object... args) {
String date = new SimpleDateFormat("HH':'mm':'ss").format(new Date());
ConsoleTextOutput.appendText(String.format("[" + date + " Info]" + format, args));
logs.printf("[" + date + " Info]" + format, args);
return super.printf("[" + date + " Info]" + format, args);
}
@Override
public void println() {
String date = new SimpleDateFormat("HH':'mm':'ss").format(new Date());
ConsoleTextOutput.appendText("[" + date + " Info]", true);
logs.println("[" + date + " Info]");
super.println("[" + date + " Info]");
}
@Override
public void println(boolean x) {
String date = new SimpleDateFormat("HH':'mm':'ss").format(new Date());
ConsoleTextOutput.appendText("[" + date + " Info] " + x, true);
logs.println("[" + date + " Info]" + x);
super.println("[" + date + " Info]" + x);
}
@Override
public void println(char x) {
String date = new SimpleDateFormat("HH':'mm':'ss").format(new Date());
ConsoleTextOutput.appendText("[" + date + " Info] " + x, true);
logs.println("[" + date + " Info]" + x);
super.println("[" + date + " Info]" + x);
}
@Override
public void println(char[] x) {
String date = new SimpleDateFormat("HH':'mm':'ss").format(new Date());
ConsoleTextOutput.appendText("[" + date + " Info] " + String.valueOf(x), true);
logs.println("[" + date + " Info]" + String.valueOf(x));
super.println("[" + date + " Info]" + String.valueOf(x));
}
@Override
public void println(double x) {
String date = new SimpleDateFormat("HH':'mm':'ss").format(new Date());
ConsoleTextOutput.appendText("[" + date + " Info] " + x, true);
logs.println("[" + date + " Info]" + x);
super.println("[" + date + " Info]" + x);
}
@Override
public void println(float x) {
String date = new SimpleDateFormat("HH':'mm':'ss").format(new Date());
ConsoleTextOutput.appendText("[" + date + " Info] " + x, true);
logs.println("[" + date + " Info]" + x);
super.println("[" + date + " Info]" + x);
}
@Override
public void println(int x) {
String date = new SimpleDateFormat("HH':'mm':'ss").format(new Date());
ConsoleTextOutput.appendText("[" + date + " Info] " + x, true);
logs.println("[" + date + " Info]" + x);
super.println("[" + date + " Info]" + x);
}
@Override
public void println(long x) {
String date = new SimpleDateFormat("HH':'mm':'ss").format(new Date());
ConsoleTextOutput.appendText("[" + date + " Info] " + x, true);
logs.println("[" + date + " Info]" + x);
super.println("[" + date + " Info]" + x);
}
@Override
public void println(Object x) {
String date = new SimpleDateFormat("HH':'mm':'ss").format(new Date());
ConsoleTextOutput.appendText("[" + date + " Info] " + x, true);
logs.println("[" + date + " Info]" + x);
super.println("[" + date + " Info]" + x);
}
@Override
public void println(String string) {
String date = new SimpleDateFormat("HH':'mm':'ss").format(new Date());
ConsoleTextOutput.appendText("[" + date + " Info] " + string, true);
logs.println("[" + date + " Info] " + string);
super.println("[" + date + " Info] " + string);
}
}
public static class ConsoleErrorStream extends PrintStream {
private PrintStream logs;
public ConsoleErrorStream(OutputStream out, PrintStream logs) {
super(out);
this.logs = logs;
}
@Override
public PrintStream printf(Locale l, String format, Object... args) {
String date = new SimpleDateFormat("HH':'mm':'ss").format(new Date());
ConsoleTextOutput.appendText(String.format(l, "[" + date + " Error]" + format, args));
logs.printf(l, "[" + date + " Error]" + format, args);
return super.printf(l, "[" + date + " Error]" + format, args);
}
@Override
public PrintStream printf(String format, Object... args) {
String date = new SimpleDateFormat("HH':'mm':'ss").format(new Date());
ConsoleTextOutput.appendText(String.format("[" + date + " Error]" + format, args));
logs.printf("[" + date + " Error]" + format, args);
return super.printf("[" + date + " Error]" + format, args);
}
@Override
public void println() {
String date = new SimpleDateFormat("HH':'mm':'ss").format(new Date());
ConsoleTextOutput.appendText("[" + date + " Error]", true);
logs.println("[" + date + " Error]");
super.println("[" + date + " Error]");
}
@Override
public void println(boolean x) {
String date = new SimpleDateFormat("HH':'mm':'ss").format(new Date());
ConsoleTextOutput.appendText("[" + date + " Error] " + x, true);
logs.println("[" + date + " Error]" + x);
super.println("[" + date + " Error]" + x);
}
@Override
public void println(char x) {
String date = new SimpleDateFormat("HH':'mm':'ss").format(new Date());
ConsoleTextOutput.appendText("[" + date + " Error] " + x, true);
logs.println("[" + date + " Error]" + x);
super.println("[" + date + " Error]" + x);
}
@Override
public void println(char[] x) {
String date = new SimpleDateFormat("HH':'mm':'ss").format(new Date());
ConsoleTextOutput.appendText("[" + date + " Error] " + String.valueOf(x), true);
logs.println("[" + date + " Error]" + String.valueOf(x));
super.println("[" + date + " Error]" + String.valueOf(x));
}
@Override
public void println(double x) {
String date = new SimpleDateFormat("HH':'mm':'ss").format(new Date());
ConsoleTextOutput.appendText("[" + date + " Error] " + x, true);
logs.println("[" + date + " Error]" + x);
super.println("[" + date + " Error]" + x);
}
@Override
public void println(float x) {
String date = new SimpleDateFormat("HH':'mm':'ss").format(new Date());
ConsoleTextOutput.appendText("[" + date + " Error] " + x, true);
logs.println("[" + date + " Error]" + x);
super.println("[" + date + " Error]" + x);
}
@Override
public void println(int x) {
String date = new SimpleDateFormat("HH':'mm':'ss").format(new Date());
ConsoleTextOutput.appendText("[" + date + " Error] " + x, true);
logs.println("[" + date + " Error]" + x);
super.println("[" + date + " Error]" + x);
}
@Override
public void println(long x) {
String date = new SimpleDateFormat("HH':'mm':'ss").format(new Date());
ConsoleTextOutput.appendText("[" + date + " Error] " + x, true);
logs.println("[" + date + " Error]" + x);
super.println("[" + date + " Error]" + x);
}
@Override
public void println(Object x) {
String date = new SimpleDateFormat("HH':'mm':'ss").format(new Date());
ConsoleTextOutput.appendText("[" + date + " Error] " + x, true);
logs.println("[" + date + " Error]" + x);
super.println("[" + date + " Error]" + x);
}
@Override
public void println(String string) {
String date = new SimpleDateFormat("HH':'mm':'ss").format(new Date());
ConsoleTextOutput.appendText("[" + date + " Error] " + string, true);
logs.println("[" + date + " Error] " + string);
super.println("[" + date + " Error] " + string);
}
}
}