From ac2178a247c5cbad86c005768eb144c6a352edd3 Mon Sep 17 00:00:00 2001 From: Myles Date: Fri, 4 Mar 2016 23:10:07 +0000 Subject: [PATCH] Add debug mode so we can analyse packets --- .../us/myles/ViaVersion/ViaVersionPlugin.java | 12 +++++++++++- .../us/myles/ViaVersion/api/ViaVersionAPI.java | 6 ++++++ .../ViaVersion/commands/ViaVersionCommand.java | 13 ++++++++++++- .../transformers/IncomingTransformer.java | 13 ++++++++----- .../transformers/OutgoingTransformer.java | 17 ++++++++++------- 5 files changed, 47 insertions(+), 14 deletions(-) diff --git a/src/main/java/us/myles/ViaVersion/ViaVersionPlugin.java b/src/main/java/us/myles/ViaVersion/ViaVersionPlugin.java index a84e350bc..c4fd3c515 100644 --- a/src/main/java/us/myles/ViaVersion/ViaVersionPlugin.java +++ b/src/main/java/us/myles/ViaVersion/ViaVersionPlugin.java @@ -31,6 +31,7 @@ import java.util.concurrent.TimeUnit; public class ViaVersionPlugin extends JavaPlugin implements ViaVersionAPI { private final Map portedPlayers = new ConcurrentHashMap(); + private boolean debug = false; @Override public void onEnable() { @@ -58,7 +59,7 @@ public class ViaVersionPlugin extends JavaPlugin implements ViaVersionAPI { Bukkit.getPluginManager().registerEvents(new ArmorListener(this), this); - getCommand("viaversion").setExecutor(new ViaVersionCommand()); + getCommand("viaversion").setExecutor(new ViaVersionCommand(this)); } public void injectPacketHandler() throws Exception { @@ -107,6 +108,15 @@ public class ViaVersionPlugin extends JavaPlugin implements ViaVersionAPI { ci.sendRawPacket(packet); } + @Override + public boolean isDebug() { + return this.debug; + } + + public void setDebug(boolean value) { + this.debug = value; + } + public void addPortedClient(ConnectionInfo info) { portedPlayers.put(info.getUUID(), info); } diff --git a/src/main/java/us/myles/ViaVersion/api/ViaVersionAPI.java b/src/main/java/us/myles/ViaVersion/api/ViaVersionAPI.java index d957ead38..4e84170c1 100644 --- a/src/main/java/us/myles/ViaVersion/api/ViaVersionAPI.java +++ b/src/main/java/us/myles/ViaVersion/api/ViaVersionAPI.java @@ -24,4 +24,10 @@ public interface ViaVersionAPI { * @throws IllegalArgumentException If not on 1.9 throws IllegalArg */ void sendRawPacket(Player player, ByteBuf packet) throws IllegalArgumentException; + + /** + * Obtain if global debug is enabled + * @return true if debug is enabled + */ + boolean isDebug(); } diff --git a/src/main/java/us/myles/ViaVersion/commands/ViaVersionCommand.java b/src/main/java/us/myles/ViaVersion/commands/ViaVersionCommand.java index 11872a831..54afc61d1 100644 --- a/src/main/java/us/myles/ViaVersion/commands/ViaVersionCommand.java +++ b/src/main/java/us/myles/ViaVersion/commands/ViaVersionCommand.java @@ -5,6 +5,7 @@ import org.bukkit.command.Command; import org.bukkit.command.CommandExecutor; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; +import us.myles.ViaVersion.ViaVersionPlugin; import us.myles.ViaVersion.api.ViaVersion; import java.util.ArrayList; @@ -14,6 +15,11 @@ import java.util.List; * Created by fillefilip8 on 2016-03-03. */ public class ViaVersionCommand implements CommandExecutor { + private final ViaVersionPlugin plugin; + + public ViaVersionCommand(ViaVersionPlugin plugin) { + this.plugin = plugin; + } @Override public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { @@ -37,12 +43,17 @@ public class ViaVersionCommand implements CommandExecutor { sender.sendMessage(color("&8[&61.9&8]: &b" + portedPlayers.toString())); sender.sendMessage(color("&8[&61.8&8]: &b" + normalPlayers.toString())); } + if (args[0].equalsIgnoreCase("debug")) { + plugin.setDebug(!plugin.isDebug()); + sender.sendMessage(color("&6Debug mode is now " + (plugin.isDebug() ? "&aenabled" : "&cdisabled"))); + } } } return false; } - public String color(String string){ + + public String color(String string) { return string.replace("&", "ยง"); } } diff --git a/src/main/java/us/myles/ViaVersion/transformers/IncomingTransformer.java b/src/main/java/us/myles/ViaVersion/transformers/IncomingTransformer.java index 64fbcf1d3..b8070306c 100644 --- a/src/main/java/us/myles/ViaVersion/transformers/IncomingTransformer.java +++ b/src/main/java/us/myles/ViaVersion/transformers/IncomingTransformer.java @@ -7,6 +7,7 @@ import org.bukkit.inventory.ItemStack; import us.myles.ViaVersion.CancelException; import us.myles.ViaVersion.ConnectionInfo; import us.myles.ViaVersion.ViaVersionPlugin; +import us.myles.ViaVersion.api.ViaVersion; import us.myles.ViaVersion.packets.PacketType; import us.myles.ViaVersion.packets.State; import us.myles.ViaVersion.slot.ItemSlotRewriter; @@ -35,9 +36,11 @@ public class IncomingTransformer { if (packet.getPacketID() != -1) { packetID = packet.getPacketID(); } -// if (packet != PacketType.PLAY_PLAYER_POSITION_LOOK_REQUEST && packet != PacketType.PLAY_KEEP_ALIVE_REQUEST && packet != PacketType.PLAY_PLAYER_POSITION_REQUEST && packet != PacketType.PLAY_PLAYER_LOOK_REQUEST) { -// System.out.println("Packet Type: " + packet + " New ID: " + packetID + " Original: " + original); -// } + if (ViaVersion.getInstance().isDebug()) { + if (packet != PacketType.PLAY_PLAYER_POSITION_LOOK_REQUEST && packet != PacketType.PLAY_KEEP_ALIVE_REQUEST && packet != PacketType.PLAY_PLAYER_POSITION_REQUEST && packet != PacketType.PLAY_PLAYER_LOOK_REQUEST) { + System.out.println("Direction " + packet.getDirection().name() + " Packet Type: " + packet + " New ID: " + packetID + " Original: " + original + " Size: " + input.readableBytes()); + } + } if (packet == PacketType.PLAY_TP_CONFIRM || packet == PacketType.PLAY_VEHICLE_MOVE_REQUEST) { //TODO handle client-sided horse riding throw new CancelException(); } @@ -175,13 +178,13 @@ public class IncomingTransformer { } return; } - if(packet == PacketType.PLAY_PLUGIN_MESSAGE_REQUEST) { + if (packet == PacketType.PLAY_PLUGIN_MESSAGE_REQUEST) { String name = PacketUtil.readString(input); PacketUtil.writeString(name, output); byte[] b = new byte[input.readableBytes()]; input.readBytes(b); // patch books - if(name.equals("MC|BSign")){ + if (name.equals("MC|BSign")) { ByteBuf in = Unpooled.wrappedBuffer(b); try { ItemSlotRewriter.ItemStack stack = ItemSlotRewriter.readItemStack(in); diff --git a/src/main/java/us/myles/ViaVersion/transformers/OutgoingTransformer.java b/src/main/java/us/myles/ViaVersion/transformers/OutgoingTransformer.java index 2dec93349..6b0a38d0f 100644 --- a/src/main/java/us/myles/ViaVersion/transformers/OutgoingTransformer.java +++ b/src/main/java/us/myles/ViaVersion/transformers/OutgoingTransformer.java @@ -44,14 +44,17 @@ public class OutgoingTransformer { } PacketType packet = PacketType.getOutgoingPacket(info.getState(), packetID); - + int original = packetID; + if (packet.getPacketID() != -1) { + packetID = packet.getNewPacketID(); + } if (packet == null) { throw new RuntimeException("Outgoing Packet not found? " + packetID + " State: " + info.getState() + " Version: " + info.getProtocol()); } -// if (packet != PacketType.PLAY_CHUNK_DATA && packet != PacketType.PLAY_KEEP_ALIVE && packet != PacketType.PLAY_TIME_UPDATE && (!packet.name().toLowerCase().contains("move") && !packet.name().toLowerCase().contains("look"))) -// System.out.println("Packet Type: " + packet + " Original ID: " + packetID + " State:" + info.getState()); - if (packet.getPacketID() != -1) { - packetID = packet.getNewPacketID(); + if (ViaVersion.getInstance().isDebug()) { + if (packet != PacketType.PLAY_CHUNK_DATA && packet != PacketType.PLAY_KEEP_ALIVE && packet != PacketType.PLAY_TIME_UPDATE && (!packet.name().toLowerCase().contains("move") && !packet.name().toLowerCase().contains("look"))) { + System.out.println("Direction " + packet.getDirection().name() + " Packet Type: " + packet + " New ID: " + packetID + " Original: " + original + " Size: " + input.readableBytes()); + } } // By default no transform @@ -254,9 +257,9 @@ public class OutgoingTransformer { } if (packet == PacketType.STATUS_RESPONSE) { - String original = PacketUtil.readString(input); + String originalStatus = PacketUtil.readString(input); try { - JSONObject json = (JSONObject) new JSONParser().parse(original); + JSONObject json = (JSONObject) new JSONParser().parse(originalStatus); JSONObject version = (JSONObject) json.get("version"); version.put("protocol", info.getProtocol()); PacketUtil.writeString(json.toJSONString(), output);