Archiviert
13
0

Merge pull request #127 from dmulloy2/master

Branch hiccup
Dieser Commit ist enthalten in:
Dan Mulloy 2017-03-18 19:32:12 -04:00 committet von GitHub
Commit 2844d75607
3 geänderte Dateien mit 113 neuen und 70 gelöschten Zeilen

Datei anzeigen

@ -63,10 +63,14 @@ public class Util {
/** /**
* Gets the currently running major Java version. * Gets the currently running major Java version.
* @return The version * @return The version or -1 if it could not be found
*/ */
public static int getJavaVersion() { public static int getJavaVersion() {
String version = Runtime.class.getPackage().getSpecificationVersion(); try {
return (int) (Double.valueOf(version) * 10 % 10); String version = Runtime.class.getPackage().getSpecificationVersion();
return (int) (Double.parseDouble(version) * 10 % 10);
} catch (Throwable ex) {
return -1;
}
} }
} }

Datei anzeigen

@ -16,6 +16,7 @@
*/ */
package com.comphenix.protocol; package com.comphenix.protocol;
import java.io.ByteArrayOutputStream;
import java.io.File; import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.text.MessageFormat; import java.text.MessageFormat;
@ -29,6 +30,7 @@ import java.util.logging.Level;
import java.util.logging.LogRecord; import java.util.logging.LogRecord;
import java.util.logging.Logger; import java.util.logging.Logger;
import org.apache.commons.io.HexDump;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
import org.bukkit.command.Command; import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor; import org.bukkit.command.CommandExecutor;
@ -41,9 +43,7 @@ import com.comphenix.protocol.events.ListeningWhitelist;
import com.comphenix.protocol.events.PacketEvent; import com.comphenix.protocol.events.PacketEvent;
import com.comphenix.protocol.events.PacketListener; import com.comphenix.protocol.events.PacketListener;
import com.comphenix.protocol.injector.netty.WirePacket; import com.comphenix.protocol.injector.netty.WirePacket;
import com.google.common.base.Charsets;
import io.netty.buffer.ByteBuf;
import io.netty.buffer.ByteBufUtil;
/** /**
* Logs packets to a given stream * Logs packets to a given stream
@ -73,66 +73,89 @@ public class PacketLogging implements CommandExecutor, PacketListener {
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
PacketType type = null; PacketType type = null;
if (args.length > 2) { try {
Protocol protocol; if (args.length > 2) {
Protocol protocol;
try {
protocol = Protocol.valueOf(args[0].toUpperCase());
} catch (IllegalArgumentException ex) {
sender.sendMessage(ChatColor.RED + "Unknown protocol " + args[0]);
return true;
}
Sender pSender;
try {
pSender = Sender.valueOf(args[1].toUpperCase());
} catch (IllegalArgumentException ex) {
sender.sendMessage(ChatColor.RED + "Unknown sender: " + args[1]);
return true;
}
try {
try { try {
int id = Integer.parseInt(args[2]); protocol = Protocol.valueOf(args[0].toUpperCase());
type = PacketType.findCurrent(protocol, pSender, id); } catch (IllegalArgumentException ex) {
} catch (NumberFormatException ex) { sender.sendMessage(ChatColor.RED + "Unknown protocol " + args[0]);
type = PacketType.findCurrent(protocol, pSender, args[2]); return true;
} }
} catch (IllegalArgumentException ex) {
sender.sendMessage(ChatColor.RED + "Unknown packet: " + PacketType.format(protocol, pSender, args[2])); Sender pSender;
try {
pSender = Sender.valueOf(args[1].toUpperCase());
} catch (IllegalArgumentException ex) {
sender.sendMessage(ChatColor.RED + "Unknown sender: " + args[1]);
return true;
}
try {
try {
int id = Integer.parseInt(args[2]);
type = PacketType.findCurrent(protocol, pSender, id);
} catch (NumberFormatException ex) {
String name = args[2];
outer: for (PacketType packet : PacketType.values()) {
if (packet.getProtocol() == protocol && packet.getSender() == pSender) {
if (packet.name().equalsIgnoreCase(name)) {
type = packet;
break outer;
}
for (String className : packet.getClassNames()) {
if (className.equalsIgnoreCase(name)) {
type = packet;
break outer;
}
}
}
}
}
} catch (IllegalArgumentException ex) {
type = null;
}
if (type == null) {
sender.sendMessage(ChatColor.RED + "Unknown packet: " + args[2]);
return true;
}
if (args.length > 3) {
if (args[3].equalsIgnoreCase("console")) {
this.location = LogLocation.CONSOLE;
} else {
this.location = LogLocation.FILE;
}
}
if (pSender == Sender.CLIENT) {
if (receivingTypes.contains(type)) {
receivingTypes.remove(type);
} else {
receivingTypes.add(type);
}
} else {
if (sendingTypes.contains(type)) {
sendingTypes.remove(type);
} else {
sendingTypes.add(type);
}
}
startLogging();
sender.sendMessage(ChatColor.GREEN + "Now logging " + type.getPacketClass().getSimpleName());
return true; return true;
} }
if (args.length > 3) { sender.sendMessage(ChatColor.RED + "Invalid syntax: /packetlog <protocol> <sender> <packet> [location]");
if (args[3].equalsIgnoreCase("console")) { return true;
this.location = LogLocation.CONSOLE; } catch (Throwable ex) {
} else { sender.sendMessage(ChatColor.RED + "Failed to parse command: " + ex.toString());
this.location = LogLocation.FILE;
}
}
if (pSender == Sender.CLIENT) {
if (receivingTypes.contains(type)) {
receivingTypes.remove(type);
} else {
receivingTypes.add(type);
}
} else {
if (sendingTypes.contains(type)) {
sendingTypes.remove(type);
} else {
sendingTypes.add(type);
}
}
startLogging();
sender.sendMessage(ChatColor.GREEN + "Now logging " + type.getPacketClass().getSimpleName());
return true; return true;
} }
sender.sendMessage(ChatColor.RED + "Invalid syntax: /packetlog <protocol> <sender> <packet> [location]");
return true;
} }
private void startLogging() { private void startLogging() {
@ -176,18 +199,34 @@ public class PacketLogging implements CommandExecutor, PacketListener {
log(event); log(event);
} }
private void log(PacketEvent event) { private static String hexDump(byte[] bytes) throws IOException {
ByteBuf buffer = WirePacket.bufferFromPacket(event.getPacket()); try (ByteArrayOutputStream output = new ByteArrayOutputStream()) {
String hexDump = ByteBufUtil.hexDump(buffer); HexDump.dump(bytes, 0, output, 0);
return new String(output.toByteArray(), Charsets.UTF_8);
}
}
if (location == LogLocation.FILE) { private void log(PacketEvent event) {
fileLogger.log(Level.INFO, event.getPacketType() + ":"); try {
fileLogger.log(Level.INFO, hexDump); WirePacket packet = WirePacket.fromPacket(event.getPacket());
fileLogger.log(Level.INFO, ""); String hexDump = hexDump(packet.getBytes());
} else {
System.out.println(event.getPacketType() + ":"); if (location == LogLocation.FILE) {
System.out.println(hexDump); fileLogger.log(Level.INFO, event.getPacketType() + ":");
System.out.println(); fileLogger.log(Level.INFO, hexDump);
fileLogger.log(Level.INFO, "");
} else {
System.out.println(event.getPacketType() + ":");
System.out.println(hexDump);
System.out.println();
}
} catch (Throwable ex) {
plugin.getLogger().log(Level.WARNING, "Failed to log packet " + event.getPacketType() + ":", ex);
plugin.getLogger().log(Level.WARNING, "Clearing packet logger...");
sendingTypes.clear();
receivingTypes.clear();
startLogging();
} }
} }

Datei anzeigen

@ -156,7 +156,7 @@ public class ProtocolLib extends JavaPlugin {
ProtocolLogger.init(this); ProtocolLogger.init(this);
int java = Util.getJavaVersion(); int java = Util.getJavaVersion();
if (java < 8 && !getConfig().getBoolean("ignoreJava", false)) { if (java != -1 && java < 8 && !getConfig().getBoolean("ignoreJava", false)) {
logger.warning("Detected outdated Java version: Java " + java); logger.warning("Detected outdated Java version: Java " + java);
logger.warning("It is recommended that you update to Java 8 as soon as possible."); logger.warning("It is recommended that you update to Java 8 as soon as possible.");
logger.warning("Future versions of ProtocolLib many not support Java " + java + "."); logger.warning("Future versions of ProtocolLib many not support Java " + java + ".");