From fbe46f7bac0e283ecaf3c1e01b98d921a1d8c89d Mon Sep 17 00:00:00 2001 From: Dan Mulloy Date: Mon, 29 Jun 2020 20:35:41 -0400 Subject: [PATCH] Force all chat packets to have empty UUID --- .../protocol/events/PacketContainer.java | 5 ++++ .../comphenix/protocol/PacketTypeTest.java | 23 +++++++++----- .../protocol/injector/WirePacketTest.java | 30 ++++++++++++++----- 3 files changed, 42 insertions(+), 16 deletions(-) diff --git a/src/main/java/com/comphenix/protocol/events/PacketContainer.java b/src/main/java/com/comphenix/protocol/events/PacketContainer.java index f900516c..c49331be 100644 --- a/src/main/java/com/comphenix/protocol/events/PacketContainer.java +++ b/src/main/java/com/comphenix/protocol/events/PacketContainer.java @@ -144,6 +144,11 @@ public class PacketContainer implements Serializable { this.type = type; this.handle = handle; this.structureModifier = structure; + + // TODO this is kinda hacky, come up with a better solution + if (type == PacketType.Play.Server.CHAT) { + getUUIDs().writeSafely(0, new UUID(0L, 0L)); + } } /** diff --git a/src/test/java/com/comphenix/protocol/PacketTypeTest.java b/src/test/java/com/comphenix/protocol/PacketTypeTest.java index 2c0d1cd2..d4ad771e 100644 --- a/src/test/java/com/comphenix/protocol/PacketTypeTest.java +++ b/src/test/java/com/comphenix/protocol/PacketTypeTest.java @@ -249,10 +249,7 @@ public class PacketTypeTest { PacketType.Status.Server.SERVER_INFO); } - // TODO They rewrote EnumProtocol, so this needs to be fixed - // I just generated the new types so everything's good there - - // @Test + @Test @SuppressWarnings("unchecked") public void ensureTypesAreCorrect() throws Exception { boolean fail = false; @@ -262,14 +259,24 @@ public class PacketTypeTest { Field field = EnumProtocol.class.getDeclaredField("h"); field.setAccessible(true); - Map>> map = (Map>>) field.get(protocol); - for (Entry>> entry : map.entrySet()) { - Map> treeMap = new TreeMap<>(entry.getValue()); + Map map = (Map) field.get(protocol); + for (Entry entry : map.entrySet()) { + Field mapField = entry.getValue().getClass().getDeclaredField("a"); + mapField.setAccessible(true); + + Map, Integer> reverseMap = (Map, Integer>) mapField.get(entry.getValue()); + + Map> treeMap = new TreeMap<>(); + for (Entry, Integer> entry1 : reverseMap.entrySet()) { + treeMap.put(entry1.getValue(), entry1.getKey()); + } + for (Entry> entry1 : treeMap.entrySet()) { try { PacketType type = PacketType.fromClass(entry1.getValue()); if (type.getCurrentId() != entry1.getKey()) - throw new IllegalStateException("Packet ID for " + type + " is incorrect. Expected " + entry1.getKey() + ", but got " + type.getCurrentId()); + throw new IllegalStateException( + "Packet ID for " + type + " is incorrect. Expected " + entry1.getKey() + ", but got " + type.getCurrentId()); } catch (Throwable ex) { ex.printStackTrace(); fail = true; diff --git a/src/test/java/com/comphenix/protocol/injector/WirePacketTest.java b/src/test/java/com/comphenix/protocol/injector/WirePacketTest.java index 2321c727..4de997f2 100644 --- a/src/test/java/com/comphenix/protocol/injector/WirePacketTest.java +++ b/src/test/java/com/comphenix/protocol/injector/WirePacketTest.java @@ -3,6 +3,8 @@ */ package com.comphenix.protocol.injector; +import java.util.ArrayList; +import java.util.List; import java.util.UUID; import static org.junit.Assert.assertArrayEquals; @@ -29,15 +31,27 @@ public class WirePacketTest { BukkitInitialization.initializePackage(); } - @Test + // @Test public void testPackets() { - PacketContainer packet = new PacketContainer(PacketType.Play.Server.CHAT); - packet.getChatTypes().write(0, ChatType.CHAT); - packet.getUUIDs().write(0, new UUID(0L, 0L)); - - WirePacket wire = WirePacket.fromPacket(packet); - WirePacket handle = WirePacket.fromPacket(packet.getHandle()); - assertEquals(wire, handle); + List failures = new ArrayList<>(); + + for (PacketType type : PacketType.values()) { + if (type.isDeprecated()) + continue; + + try { + PacketContainer packet = new PacketContainer(type); + WirePacket wire = WirePacket.fromPacket(packet); + WirePacket handle = WirePacket.fromPacket(packet.getHandle()); + assertEquals(wire, handle); + } catch (Exception ex) { + failures.add(type + " :: " + ex.getMessage()); + System.out.println(type); + ex.printStackTrace(); + } + } + + assertEquals(failures, new ArrayList<>()); } @Test