Archiviert
13
0

Much better console interaction. History, no more losing the command, colours, inline editing, etc. Shorter log output to console (but not to file).

Dieser Commit ist enthalten in:
Dinnerbone 2011-02-25 16:12:38 +00:00
Ursprung 659fa9eaf9
Commit 57338bee52
9 geänderte Dateien mit 181 neuen und 7 gelöschten Zeilen

Datei anzeigen

@ -47,6 +47,11 @@
<artifactId>jopt-simple</artifactId> <artifactId>jopt-simple</artifactId>
<version>3.2</version> <version>3.2</version>
</dependency> </dependency>
<dependency>
<groupId>jline</groupId>
<artifactId>jline</artifactId>
<version>0.9.94</version>
</dependency>
</dependencies> </dependencies>
<!-- This builds a completely 'ready to start' jar with all dependencies inside --> <!-- This builds a completely 'ready to start' jar with all dependencies inside -->
<build> <build>

Datei anzeigen

@ -6,6 +6,9 @@ import java.util.logging.Level;
import java.util.logging.Logger; import java.util.logging.Logger;
import java.util.logging.Handler; // CraftBukkit import java.util.logging.Handler; // CraftBukkit
import jline.ConsoleReader;
import org.bukkit.craftbukkit.util.ShortConsoleLogFormatter;
import org.bukkit.craftbukkit.util.TerminalConsoleHandler;
public class ConsoleLogManager { public class ConsoleLogManager {
@ -14,11 +17,12 @@ public class ConsoleLogManager {
public ConsoleLogManager() {} public ConsoleLogManager() {}
public static void a() { // Craftbukkit - change of method signature!
public static void a(ConsoleReader reader) {
ConsoleLogFormatter consolelogformatter = new ConsoleLogFormatter(); ConsoleLogFormatter consolelogformatter = new ConsoleLogFormatter();
a.setUseParentHandlers(false); a.setUseParentHandlers(false);
ConsoleHandler consolehandler = new ConsoleHandler(); ConsoleHandler consolehandler = new TerminalConsoleHandler(reader);
// CraftBukkit start // CraftBukkit start
for (Handler handler: global.getHandlers()) { for (Handler handler: global.getHandlers()) {
@ -26,7 +30,7 @@ public class ConsoleLogManager {
} }
// CraftBukkit end // CraftBukkit end
consolehandler.setFormatter(consolelogformatter); consolehandler.setFormatter(new ShortConsoleLogFormatter()); // Craftbukkit
a.addHandler(consolehandler); a.addHandler(consolehandler);
global.addHandler(consolehandler); // CraftBukkit global.addHandler(consolehandler); // CraftBukkit

Datei anzeigen

@ -15,10 +15,12 @@ import java.util.logging.Logger;
// CraftBukkit start // CraftBukkit start
import java.io.PrintStream; import java.io.PrintStream;
import java.net.UnknownHostException; import java.net.UnknownHostException;
import jline.ConsoleReader;
import joptsimple.OptionSet; import joptsimple.OptionSet;
import org.bukkit.command.ConsoleCommandSender; import org.bukkit.command.ConsoleCommandSender;
import org.bukkit.craftbukkit.CraftServer; import org.bukkit.craftbukkit.CraftServer;
import org.bukkit.craftbukkit.LoggerOutputStream; import org.bukkit.craftbukkit.LoggerOutputStream;
import org.bukkit.craftbukkit.command.ColouredConsoleSender;
import org.bukkit.craftbukkit.scheduler.CraftScheduler; import org.bukkit.craftbukkit.scheduler.CraftScheduler;
import org.bukkit.event.Event; import org.bukkit.event.Event;
import org.bukkit.event.world.WorldEvent; import org.bukkit.event.world.WorldEvent;
@ -50,12 +52,21 @@ public class MinecraftServer implements Runnable, ICommandListener {
public List<WorldServer> worlds = new ArrayList<WorldServer>(); public List<WorldServer> worlds = new ArrayList<WorldServer>();
public CraftServer server; public CraftServer server;
public OptionSet options; public OptionSet options;
public ConsoleCommandSender console; public ColouredConsoleSender console;
public ConsoleReader reader;
// Craftbukkit end // Craftbukkit end
public MinecraftServer(OptionSet options) { // CraftBukkit - adds argument OptionSet public MinecraftServer(OptionSet options) { // CraftBukkit - adds argument OptionSet
new ThreadSleepForever(this); new ThreadSleepForever(this);
this.options = options; // CraftBukkit
// CraftBukkit start
this.options = options;
try {
this.reader = new ConsoleReader();
} catch (IOException ex) {
Logger.getLogger(MinecraftServer.class.getName()).log(Level.SEVERE, null, ex);
}
// CraftBukkit end
} }
private boolean d() throws UnknownHostException { // CraftBukkit - added throws UnknownHostException private boolean d() throws UnknownHostException { // CraftBukkit - added throws UnknownHostException
@ -64,7 +75,7 @@ public class MinecraftServer implements Runnable, ICommandListener {
threadcommandreader.setDaemon(true); threadcommandreader.setDaemon(true);
threadcommandreader.start(); threadcommandreader.start();
ConsoleLogManager.a(); ConsoleLogManager.a(reader); // Craftbukkit
// CraftBukkit start // CraftBukkit start
System.setOut(new PrintStream(new LoggerOutputStream(a, Level.INFO), true)); System.setOut(new PrintStream(new LoggerOutputStream(a, Level.INFO), true));

Datei anzeigen

@ -17,6 +17,7 @@ import org.bukkit.Location;
import org.bukkit.command.ConsoleCommandSender; import org.bukkit.command.ConsoleCommandSender;
import org.bukkit.craftbukkit.CraftServer; import org.bukkit.craftbukkit.CraftServer;
import org.bukkit.craftbukkit.CraftWorld; import org.bukkit.craftbukkit.CraftWorld;
import org.bukkit.craftbukkit.command.ColouredConsoleSender;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.event.Event; import org.bukkit.event.Event;
import org.bukkit.event.Event.Type; import org.bukkit.event.Event.Type;
@ -48,7 +49,7 @@ public class ServerConfigurationManager {
public ServerConfigurationManager(MinecraftServer minecraftserver) { public ServerConfigurationManager(MinecraftServer minecraftserver) {
minecraftserver.server = new CraftServer(minecraftserver, this); minecraftserver.server = new CraftServer(minecraftserver, this);
minecraftserver.console = new ConsoleCommandSender(minecraftserver.server); minecraftserver.console = new ColouredConsoleSender(minecraftserver.server);
server = minecraftserver.server; server = minecraftserver.server;
// CraftBukkit end // CraftBukkit end

Datei anzeigen

@ -0,0 +1,34 @@
package net.minecraft.server;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.logging.Level;
import java.util.logging.Logger;
import jline.ConsoleReader;
public class ThreadCommandReader extends Thread {
final MinecraftServer a;
public ThreadCommandReader(MinecraftServer minecraftserver) {
this.a = minecraftserver;
}
public void run() {
// Craftbukkit start - whole method, nuked to oblivion! :o
try {
ConsoleReader reader = a.reader;
String line = null;
while ((!this.a.g) && (MinecraftServer.a(this.a)) && ((line = reader.readLine()) != null)) {
this.a.a(line, (ICommandListener) this.a);
}
} catch (IOException ex) {
Logger.getLogger(ThreadCommandReader.class.getName()).log(Level.SEVERE, null, ex);
}
// Craftbukkit end
}
}

Datei anzeigen

@ -9,6 +9,7 @@ import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.logging.Level; import java.util.logging.Level;
import java.util.logging.Logger; import java.util.logging.Logger;
import jline.ConsoleReader;
import net.minecraft.server.ChunkCoordinates; import net.minecraft.server.ChunkCoordinates;
import net.minecraft.server.ConvertProgressUpdater; import net.minecraft.server.ConvertProgressUpdater;
import net.minecraft.server.Convertable; import net.minecraft.server.Convertable;
@ -276,4 +277,8 @@ public final class CraftServer implements Server {
public Logger getLogger() { public Logger getLogger() {
return MinecraftServer.a; return MinecraftServer.a;
} }
public ConsoleReader getReader() {
return console.reader;
}
} }

Datei anzeigen

@ -0,0 +1,54 @@
package org.bukkit.craftbukkit.command;
import java.util.EnumMap;
import java.util.Map;
import jline.ANSIBuffer.ANSICodes;
import jline.ConsoleReader;
import jline.Terminal;
import org.bukkit.ChatColor;
import org.bukkit.command.ConsoleCommandSender;
import org.bukkit.craftbukkit.CraftServer;
public class ColouredConsoleSender extends ConsoleCommandSender {
private final ConsoleReader reader;
private final Terminal terminal;
private final Map<ChatColor, String> replacements = new EnumMap<ChatColor, String>(ChatColor.class);
private final ChatColor[] colors = ChatColor.values();
public ColouredConsoleSender(CraftServer server) {
super(server);
this.reader = server.getReader();
this.terminal = reader.getTerminal();
replacements.put(ChatColor.BLACK, ANSICodes.attrib(0));
replacements.put(ChatColor.RED, ANSICodes.attrib(31));
replacements.put(ChatColor.DARK_RED, ANSICodes.attrib(31));
replacements.put(ChatColor.GREEN, ANSICodes.attrib(32));
replacements.put(ChatColor.DARK_GREEN, ANSICodes.attrib(32));
replacements.put(ChatColor.YELLOW, ANSICodes.attrib(33));
replacements.put(ChatColor.BLUE, ANSICodes.attrib(34));
replacements.put(ChatColor.DARK_BLUE, ANSICodes.attrib(34));
replacements.put(ChatColor.LIGHT_PURPLE, ANSICodes.attrib(35));
replacements.put(ChatColor.DARK_PURPLE, ANSICodes.attrib(35));
replacements.put(ChatColor.AQUA, ANSICodes.attrib(36));
replacements.put(ChatColor.WHITE, ANSICodes.attrib(37));
}
@Override
public void sendMessage(String message) {
if (terminal.isANSISupported()) {
String result = message;
for (ChatColor color : colors) {
if (replacements.containsKey(color)) {
result = result.replaceAll(color.toString(), replacements.get(color));
} else {
result = result.replaceAll(color.toString(), "");
}
}
System.out.println(result + ANSICodes.attrib(0));
} else {
super.sendMessage(message);
}
}
}

Datei anzeigen

@ -0,0 +1,33 @@
package org.bukkit.craftbukkit.util;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.text.SimpleDateFormat;
import java.util.logging.Formatter;
import java.util.logging.LogRecord;
public class ShortConsoleLogFormatter extends Formatter {
private final SimpleDateFormat date = new SimpleDateFormat("HH:mm:ss");
@Override
public String format(LogRecord record) {
StringBuilder builder = new StringBuilder();
Throwable ex = record.getThrown();
builder.append(date.format(record.getMillis()));
builder.append(" [");
builder.append(record.getLevel().getLocalizedName().toUpperCase());
builder.append("] ");
builder.append(record.getMessage());
builder.append('\n');
if (ex != null) {
StringWriter writer = new StringWriter();
ex.printStackTrace(new PrintWriter(writer));
builder.append(writer);
}
return builder.toString();
}
}

Datei anzeigen

@ -0,0 +1,27 @@
package org.bukkit.craftbukkit.util;
import java.io.IOException;
import java.util.logging.ConsoleHandler;
import java.util.logging.Level;
import java.util.logging.Logger;
import jline.ConsoleReader;
public class TerminalConsoleHandler extends ConsoleHandler {
private final ConsoleReader reader;
public TerminalConsoleHandler(ConsoleReader reader) {
super();
this.reader = reader;
}
@Override
public synchronized void flush() {
super.flush();
try {
reader.redrawLine();
} catch (IOException ex) {
Logger.getLogger(TerminalConsoleHandler.class.getName()).log(Level.SEVERE, null, ex);
}
}
}