From 1a90f0eb28537c09e678044fc72e5ed9558bafb7 Mon Sep 17 00:00:00 2001 From: Myles Date: Thu, 3 Mar 2016 19:24:37 +0000 Subject: [PATCH] Use new method for finding cause, might need updating with disconnect. Can't replicate disconnect spam on any version on my machine. Also move to JSON for all because older versions don't have GSON :( in main package --- .../ViaVersion/handlers/ViaDecodeHandler.java | 10 +--- .../ViaVersion/handlers/ViaEncodeHandler.java | 9 +--- .../transformers/OutgoingTransformer.java | 46 ++++++++++--------- .../us/myles/ViaVersion/util/PacketUtil.java | 10 +++- 4 files changed, 37 insertions(+), 38 deletions(-) diff --git a/src/main/java/us/myles/ViaVersion/handlers/ViaDecodeHandler.java b/src/main/java/us/myles/ViaVersion/handlers/ViaDecodeHandler.java index 0a2d0f735..8f4d4b7d6 100644 --- a/src/main/java/us/myles/ViaVersion/handlers/ViaDecodeHandler.java +++ b/src/main/java/us/myles/ViaVersion/handlers/ViaDecodeHandler.java @@ -44,13 +44,7 @@ public class ViaDecodeHandler extends ByteToMessageDecoder { @Override public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception { - if (!(cause.getCause().getCause() instanceof CancelException)) { - if (!(cause.getCause() instanceof CancelException)) { - if (!(cause instanceof CancelException)) { - super.exceptionCaught(ctx, cause); - } - } - } + if (PacketUtil.containsCause(cause, CancelException.class)) return; + super.exceptionCaught(ctx, cause); } - } diff --git a/src/main/java/us/myles/ViaVersion/handlers/ViaEncodeHandler.java b/src/main/java/us/myles/ViaVersion/handlers/ViaEncodeHandler.java index dac12dc59..915f2d9d3 100644 --- a/src/main/java/us/myles/ViaVersion/handlers/ViaEncodeHandler.java +++ b/src/main/java/us/myles/ViaVersion/handlers/ViaEncodeHandler.java @@ -72,12 +72,7 @@ public class ViaEncodeHandler extends MessageToByteEncoder { @Override public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception { - if (!(cause.getCause().getCause() instanceof CancelException)) { - if (!(cause.getCause() instanceof CancelException)) { - if (!(cause instanceof CancelException)) { - super.exceptionCaught(ctx, cause); - } - } - } + if (PacketUtil.containsCause(cause, CancelException.class)) return; + super.exceptionCaught(ctx, cause); } } diff --git a/src/main/java/us/myles/ViaVersion/transformers/OutgoingTransformer.java b/src/main/java/us/myles/ViaVersion/transformers/OutgoingTransformer.java index 90cf3967a..8fdfb86ca 100644 --- a/src/main/java/us/myles/ViaVersion/transformers/OutgoingTransformer.java +++ b/src/main/java/us/myles/ViaVersion/transformers/OutgoingTransformer.java @@ -1,15 +1,12 @@ package us.myles.ViaVersion.transformers; -import com.google.gson.Gson; -import com.google.gson.JsonObject; - import io.netty.buffer.ByteBuf; - import org.bukkit.entity.EntityType; +import org.json.simple.JSONObject; import org.json.simple.parser.JSONParser; +import org.json.simple.parser.ParseException; import org.spacehq.mc.protocol.data.game.chunk.Column; import org.spacehq.mc.protocol.util.NetUtil; - import us.myles.ViaVersion.CancelException; import us.myles.ViaVersion.ConnectionInfo; import us.myles.ViaVersion.ViaVersionPlugin; @@ -28,7 +25,8 @@ import java.util.*; import static us.myles.ViaVersion.util.PacketUtil.*; public class OutgoingTransformer { - private static Gson gson = new Gson(); + private static JSONParser parser = new JSONParser(); + private final ConnectionInfo info; private final ViaVersionPlugin plugin = (ViaVersionPlugin) ViaVersion.getInstance(); private boolean cancel = false; @@ -65,11 +63,11 @@ public class OutgoingTransformer { int catid = 0; String newname = name; if (effect != null) { - if(effect.isBreakPlaceSound()) { - input.readBytes(input.readableBytes()); - output.clear(); - return; - } + if (effect.isBreakPlaceSound()) { + input.readBytes(input.readableBytes()); + output.clear(); + return; + } catid = effect.getCategory().getId(); newname = effect.getNewName(); } @@ -88,12 +86,12 @@ public class OutgoingTransformer { if (!vehicleMap.containsKey(passenger)) throw new CancelException(); vehicle = vehicleMap.remove(passenger); - writeVarInt(vehicle,output); + writeVarInt(vehicle, output); writeVarIntArray(Collections.emptyList(), output); - } else{ + } else { writeVarInt(vehicle, output); writeVarIntArray(Collections.singletonList(passenger), output); - vehicleMap.put(passenger,vehicle); + vehicleMap.put(passenger, vehicle); } return; } @@ -193,9 +191,14 @@ public class OutgoingTransformer { if (packet == PacketType.STATUS_RESPONSE) { String original = PacketUtil.readString(input); - JsonObject object = gson.fromJson(original, JsonObject.class); - object.get("version").getAsJsonObject().addProperty("protocol", info.getProtocol()); - PacketUtil.writeString(gson.toJson(object), output); + try { + JSONObject json = (JSONObject) parser.parse(original); + JSONObject version = (JSONObject) json.get("version"); + version.put("protocol", info.getProtocol()); + PacketUtil.writeString(json.toJSONString(), output); + } catch (ParseException e) { + e.printStackTrace(); + } return; } if (packet == PacketType.LOGIN_SUCCESS) { @@ -522,11 +525,10 @@ public class OutgoingTransformer { line = "{\"text\":" + line + "}"; } try { - new JSONParser().parse(line); - } - catch (org.json.simple.parser.ParseException e) { - System.out.println("Invalid JSON String: \"" + line + "\" Please report this issue to the ViaVersion Github!"); - return "{\"text\":\"\"}"; + parser.parse(line); + } catch (org.json.simple.parser.ParseException e) { + System.out.println("Invalid JSON String: \"" + line + "\" Please report this issue to the ViaVersion Github!"); + return "{\"text\":\"\"}"; } return line; } diff --git a/src/main/java/us/myles/ViaVersion/util/PacketUtil.java b/src/main/java/us/myles/ViaVersion/util/PacketUtil.java index 1c2dde784..086b4cdc0 100644 --- a/src/main/java/us/myles/ViaVersion/util/PacketUtil.java +++ b/src/main/java/us/myles/ViaVersion/util/PacketUtil.java @@ -390,7 +390,7 @@ public class PacketUtil { } catch (InvocationTargetException e) { e.printStackTrace(); } - return null; + return null; } public static long[] readBlockPosition(ByteBuf buf) { @@ -414,4 +414,12 @@ public class PacketUtil { return data; } + + public static boolean containsCause(Throwable t, Class c) { + while (t != null) { + t = t.getCause(); + if (c.isAssignableFrom(t.getClass())) return true; + } + return false; + } }