From db55c6409c328978bc08af27619f5af398368c8e Mon Sep 17 00:00:00 2001 From: jhqwqmc <2110242767@qq.com> Date: Fri, 28 Mar 2025 01:32:45 +0800 Subject: [PATCH] =?UTF-8?q?fix(network):=20=E9=80=82=E9=85=8D=20Paper1.21.?= =?UTF-8?q?4-222=20=E7=89=88=E6=9C=AC=E6=9B=B4=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../bukkit/plugin/network/PacketConsumers.java | 11 ++++++++--- .../craftengine/bukkit/util/Reflections.java | 11 ++++++++++- 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/PacketConsumers.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/PacketConsumers.java index a220f5f1b..18e80d2dc 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/PacketConsumers.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/PacketConsumers.java @@ -909,9 +909,14 @@ public class PacketConsumers { Object id = Reflections.method$CustomPacketPayload$Type$id.invoke(type); String channel = id.toString(); if (!channel.equals(NetworkManager.MOD_CHANNEL)) return; - ByteBuf buf = (ByteBuf) Reflections.method$DiscardedPayload$data.invoke(payload); - byte[] data = new byte[buf.readableBytes()]; - buf.readBytes(data); + byte[] data; + if (Reflections.method$DiscardedPayload$data != null) { + ByteBuf buf = (ByteBuf) Reflections.method$DiscardedPayload$data.invoke(payload); + data = new byte[buf.readableBytes()]; + buf.readBytes(data); + } else { + data = (byte[]) Reflections.method$DiscardedPayload$dataByteArray.invoke(payload); + } String decodeData = new String(data, StandardCharsets.UTF_8); if (!decodeData.endsWith("init")) return; int firstColon = decodeData.indexOf(':'); diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/util/Reflections.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/util/Reflections.java index 672dc1922..3aba8d9d2 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/util/Reflections.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/util/Reflections.java @@ -5667,11 +5667,20 @@ public class Reflections { .map(it -> ReflectionUtils.getMethod(it, clazz$ResourceLocation)) .orElse(null); - // 1.20.5+ + // 1.20.5~1.21.4#221 public static final Method method$DiscardedPayload$data = Optional.ofNullable(clazz$DiscardedPayload) .map(it -> ReflectionUtils.getMethod(it, ByteBuf.class)) .orElse(null); + // 1.21.4#222+ + // 我tm服了这个 sb paper 你 tmd 乱改签名干什么有病啊 + public static final Method method$DiscardedPayload$dataByteArray = Optional.ofNullable(method$DiscardedPayload$data) + .map(m -> (Method) null) + .orElseGet(() -> Optional.ofNullable(clazz$DiscardedPayload) + .map(clazz -> ReflectionUtils.getMethod(clazz, byte[].class)) + .orElse(null) + ); + public static final Class clazz$ClientboundDisconnectPacket = requireNonNull( ReflectionUtils.getClazz( BukkitReflectionUtils.assembleMCClass("network.protocol.common.ClientboundDisconnectPacket"),