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 cceb6c1fa..36a5bb575 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 @@ -906,9 +906,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 be56d9e0a..f0c928bdf 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 @@ -5668,11 +5668,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"),