From f381f0a2f7ffbcb7e9b829f3596a733a6b30ab0d Mon Sep 17 00:00:00 2001 From: Dan Mulloy Date: Mon, 19 Oct 2020 11:04:11 -0400 Subject: [PATCH] Fix multi block change cloning Fixes #990 --- .../com/comphenix/protocol/reflect/cloning/BukkitCloner.java | 1 + .../com/comphenix/protocol/utility/MinecraftReflection.java | 4 ++++ .../com/comphenix/protocol/events/PacketContainerTest.java | 3 +++ 3 files changed, 8 insertions(+) diff --git a/src/main/java/com/comphenix/protocol/reflect/cloning/BukkitCloner.java b/src/main/java/com/comphenix/protocol/reflect/cloning/BukkitCloner.java index 2ddf8123..14af6d42 100644 --- a/src/main/java/com/comphenix/protocol/reflect/cloning/BukkitCloner.java +++ b/src/main/java/com/comphenix/protocol/reflect/cloning/BukkitCloner.java @@ -82,6 +82,7 @@ public class BukkitCloner implements Cloner { fromWrapper(MinecraftReflection::getNBTBaseClass, NbtFactory::fromNMS); fromWrapper(MinecraftReflection::getIChatBaseComponentClass, WrappedChatComponent::fromHandle); fromWrapper(WrappedVillagerData::getNmsClass, WrappedVillagerData::fromHandle); + fromConverter(MinecraftReflection::getSectionPositionClass, BukkitConverters.getSectionPositionConverter()); try { fromManual(ComponentConverter::getBaseComponentArrayClass, source -> diff --git a/src/main/java/com/comphenix/protocol/utility/MinecraftReflection.java b/src/main/java/com/comphenix/protocol/utility/MinecraftReflection.java index 867eee84..b4407fbe 100644 --- a/src/main/java/com/comphenix/protocol/utility/MinecraftReflection.java +++ b/src/main/java/com/comphenix/protocol/utility/MinecraftReflection.java @@ -1872,6 +1872,10 @@ public class MinecraftReflection { return getCraftBukkitClass("CraftSound"); } + public static Class getSectionPositionClass() { + return getMinecraftClass("SectionPosition"); + } + // ---- ItemStack conversions private static Object itemStackAir = null; private static Method asNMSCopy = null; diff --git a/src/test/java/com/comphenix/protocol/events/PacketContainerTest.java b/src/test/java/com/comphenix/protocol/events/PacketContainerTest.java index 3251c92d..9e99f7c0 100644 --- a/src/test/java/com/comphenix/protocol/events/PacketContainerTest.java +++ b/src/test/java/com/comphenix/protocol/events/PacketContainerTest.java @@ -560,6 +560,9 @@ public class PacketContainerTest { packet.getSectionPositions().writeSafely(0, new BlockPosition(42, 43, 44)); assertEquals(new BlockPosition(42, 43, 44), packet.getSectionPositions().readSafely(0)); + + PacketContainer clone = packet.deepClone(); + assertNotSame(clone, packet); } /**