From d70e9d28d4933dfeba1cca85b005e310c7de0f3a Mon Sep 17 00:00:00 2001 From: "Kristian S. Stangeland" Date: Fri, 17 Jan 2014 23:58:04 +0100 Subject: [PATCH] Properly handle WrappedGameProfile during packet cloning. --- .../reflect/cloning/AggregateCloner.java | 2 +- .../reflect/cloning/ImmutableDetector.java | 7 +++++ .../protocol/wrappers/CloningTest.java | 26 +++++++++++++++++++ .../wrappers/WrappedAttributeTest.java | 4 +-- 4 files changed, 36 insertions(+), 3 deletions(-) create mode 100644 ProtocolLib/src/test/java/com/comphenix/protocol/wrappers/CloningTest.java diff --git a/ProtocolLib/src/main/java/com/comphenix/protocol/reflect/cloning/AggregateCloner.java b/ProtocolLib/src/main/java/com/comphenix/protocol/reflect/cloning/AggregateCloner.java index 2ae4bc1e..7edf6f65 100644 --- a/ProtocolLib/src/main/java/com/comphenix/protocol/reflect/cloning/AggregateCloner.java +++ b/ProtocolLib/src/main/java/com/comphenix/protocol/reflect/cloning/AggregateCloner.java @@ -258,6 +258,6 @@ public class AggregateCloner implements Cloner { } // Damn - failure - throw new IllegalArgumentException("Cannot clone " + source + ": No cloner is sutable."); + throw new IllegalArgumentException("Cannot clone " + source + ": No cloner is suitable."); } } diff --git a/ProtocolLib/src/main/java/com/comphenix/protocol/reflect/cloning/ImmutableDetector.java b/ProtocolLib/src/main/java/com/comphenix/protocol/reflect/cloning/ImmutableDetector.java index 103a4ae1..c5801b9f 100644 --- a/ProtocolLib/src/main/java/com/comphenix/protocol/reflect/cloning/ImmutableDetector.java +++ b/ProtocolLib/src/main/java/com/comphenix/protocol/reflect/cloning/ImmutableDetector.java @@ -30,6 +30,7 @@ import java.util.UUID; import javax.crypto.SecretKey; +import com.comphenix.protocol.utility.MinecraftReflection; import com.google.common.primitives.Primitives; /** @@ -79,6 +80,12 @@ public class ImmutableDetector implements Cloner { if (clazz.equals(type)) return true; + // Check for known immutable classes in 1.7.2 + if (MinecraftReflection.isUsingNetty()) { + if (type.equals(MinecraftReflection.getGameProfileClass())) { + return true; + } + } // Probably not return false; } diff --git a/ProtocolLib/src/test/java/com/comphenix/protocol/wrappers/CloningTest.java b/ProtocolLib/src/test/java/com/comphenix/protocol/wrappers/CloningTest.java new file mode 100644 index 00000000..c7ad2b6d --- /dev/null +++ b/ProtocolLib/src/test/java/com/comphenix/protocol/wrappers/CloningTest.java @@ -0,0 +1,26 @@ +package com.comphenix.protocol.wrappers; + +import org.junit.BeforeClass; +import org.junit.Test; + +import static org.junit.Assert.*; + +import com.comphenix.protocol.BukkitInitialization; +import com.comphenix.protocol.reflect.cloning.AggregateCloner; + +public class CloningTest { + @BeforeClass + public static void initializeBukkit() throws IllegalAccessException { + BukkitInitialization.initializePackage(); + } + + @Test + public void cloneGameProfile() { + WrappedGameProfile profile = new WrappedGameProfile("id", "name"); + WrappedGameProfile copy = WrappedGameProfile.fromHandle( + AggregateCloner.DEFAULT.clone(profile.getHandle()) + ); + + assertEquals(profile, copy); + } +} diff --git a/ProtocolLib/src/test/java/com/comphenix/protocol/wrappers/WrappedAttributeTest.java b/ProtocolLib/src/test/java/com/comphenix/protocol/wrappers/WrappedAttributeTest.java index 478e995c..8b88a1e6 100644 --- a/ProtocolLib/src/test/java/com/comphenix/protocol/wrappers/WrappedAttributeTest.java +++ b/ProtocolLib/src/test/java/com/comphenix/protocol/wrappers/WrappedAttributeTest.java @@ -13,7 +13,7 @@ import org.junit.BeforeClass; import org.junit.Test; import com.comphenix.protocol.BukkitInitialization; -import com.comphenix.protocol.Packets; +import com.comphenix.protocol.PacketType; import com.comphenix.protocol.events.PacketContainer; import com.comphenix.protocol.wrappers.WrappedAttributeModifier.Operation; import com.google.common.collect.Lists; @@ -48,7 +48,7 @@ public class WrappedAttributeTest { attribute = WrappedAttribute.newBuilder(). attributeKey("generic.attackDamage"). baseValue(2). - packet(new PacketContainer(Packets.Server.UPDATE_ATTRIBUTES)). + packet(new PacketContainer(PacketType.Play.Server.UPDATE_ATTRIBUTES)). modifiers(Lists.newArrayList(constantModifier, doubleModifier)). build(); }