From 0ee42112ac71ef9faa235ac345a7f3c9ae1cabc2 Mon Sep 17 00:00:00 2001 From: jhqwqmc <2110242767@qq.com> Date: Sat, 31 May 2025 16:29:03 +0800 Subject: [PATCH 1/2] =?UTF-8?q?refactor(network):=20=E9=87=8D=E6=9E=84?= =?UTF-8?q?=E5=8F=91=E9=80=81=E5=8C=85=E6=96=B9=E6=B3=95=E4=BB=A5=E4=BE=BF?= =?UTF-8?q?=E5=85=A8=E9=83=A8=E9=98=B6=E6=AE=B5=E9=83=BD=E5=8F=AF=E5=8F=91?= =?UTF-8?q?=E9=80=81=E5=8C=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../plugin/network/BukkitNetworkManager.java | 23 +++++++++---------- .../plugin/network/PacketConsumers.java | 4 ++-- .../plugin/user/BukkitServerPlayer.java | 16 +++++++------ .../core/plugin/network/NetWorkUser.java | 4 ++-- gradle.properties | 2 +- 5 files changed, 25 insertions(+), 24 deletions(-) diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/BukkitNetworkManager.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/BukkitNetworkManager.java index e3975568f..ea88e616e 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/BukkitNetworkManager.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/BukkitNetworkManager.java @@ -103,20 +103,20 @@ public class BukkitNetworkManager implements NetworkManager, Listener, PluginMes this.registerPacketHandlers(); // set up packet senders this.packetConsumer = FastNMS.INSTANCE::sendPacket; - this.packetsConsumer = ((serverPlayer, packets) -> { + this.packetsConsumer = ((connection, packets) -> { Object bundle = FastNMS.INSTANCE.constructor$ClientboundBundlePacket(packets); - this.packetConsumer.accept(serverPlayer, bundle); + this.packetConsumer.accept(connection, bundle); }); - this.immediatePacketConsumer = (serverPlayer, packet) -> { + this.immediatePacketConsumer = (connection, packet) -> { try { - Reflections.method$Connection$sendPacketImmediate.invoke(FastNMS.INSTANCE.field$Player$connection$connection(serverPlayer), packet, null, true); + Reflections.method$Connection$sendPacketImmediate.invoke(connection, packet, null, true); } catch (ReflectiveOperationException e) { plugin.logger().warn("Failed to invoke send packet", e); } }; - this.immediatePacketsConsumer = (serverPlayer, packets) -> { + this.immediatePacketsConsumer = (connection, packets) -> { Object bundle = FastNMS.INSTANCE.constructor$ClientboundBundlePacket(packets); - this.immediatePacketConsumer.accept(serverPlayer, bundle); + this.immediatePacketConsumer.accept(connection, bundle); }; // set up mod channel this.plugin.bootstrap().getServer().getMessenger().registerIncomingPluginChannel(this.plugin.bootstrap(), MOD_CHANNEL, this); @@ -317,8 +317,7 @@ public class BukkitNetworkManager implements NetworkManager, Listener, PluginMes public void sendPacket(@NotNull Player player, @NotNull Object packet) { try { - Object serverPlayer = FastNMS.INSTANCE.method$CraftPlayer$getHandle(player); - this.immediatePacketConsumer.accept(serverPlayer, packet); + this.immediatePacketConsumer.accept(getUser(player).connection(), packet); } catch (Exception e) { this.plugin.logger().warn("Failed to send packet", e); } @@ -327,18 +326,18 @@ public class BukkitNetworkManager implements NetworkManager, Listener, PluginMes @Override public void sendPacket(@NotNull NetWorkUser player, Object packet, boolean immediately) { if (immediately) { - this.immediatePacketConsumer.accept(player.serverPlayer(), packet); + this.immediatePacketConsumer.accept(player.connection(), packet); } else { - this.packetConsumer.accept(player.serverPlayer(), packet); + this.packetConsumer.accept(player.connection(), packet); } } @Override public void sendPackets(@NotNull NetWorkUser player, List packet, boolean immediately) { if (immediately) { - this.immediatePacketsConsumer.accept(player.serverPlayer(), packet); + this.immediatePacketsConsumer.accept(player.connection(), packet); } else { - this.packetsConsumer.accept(player.serverPlayer(), packet); + this.packetsConsumer.accept(player.connection(), packet); } } 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 65cc3739b..b65764ee1 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 @@ -2204,7 +2204,7 @@ public class PacketConsumers { } for (ResourcePackDownloadData data : dataList) { Object newPacket = ResourcePackUtils.createPacket(data.uuid(), data.url(), data.sha1()); - user.nettyChannel().writeAndFlush(newPacket); + user.sendPacket(newPacket, true); user.addResourcePackUUID(data.uuid()); } }).exceptionally(throwable -> { @@ -2246,7 +2246,7 @@ public class PacketConsumers { || action == Reflections.instance$ServerboundResourcePackPacket$Action$FAILED_DOWNLOAD) { Object kickPacket = Reflections.constructor$ClientboundDisconnectPacket.newInstance( ComponentUtils.adventureToMinecraft(Component.translatable("multiplayer.requiredTexturePrompt.disconnect"))); - user.nettyChannel().writeAndFlush(kickPacket); + user.sendPacket(kickPacket, true); user.nettyChannel().disconnect(); return; } diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/user/BukkitServerPlayer.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/user/BukkitServerPlayer.java index d8dc6457f..64090cc91 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/user/BukkitServerPlayer.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/user/BukkitServerPlayer.java @@ -56,6 +56,7 @@ public class BukkitServerPlayer extends Player { private ProtocolVersion protocolVersion = ProtocolVersion.UNKNOWN; // connection state private final Channel channel; + private final Object connection; private String name; private UUID uuid; private ConnectionState decoderState; @@ -107,6 +108,7 @@ public class BukkitServerPlayer extends Player { public BukkitServerPlayer(BukkitCraftEngine plugin, Channel channel) { this.channel = channel; this.plugin = plugin; + this.connection = channel.pipeline().get("packet_handler"); } public void setPlayer(org.bukkit.entity.Player player) { @@ -284,11 +286,6 @@ public class BukkitServerPlayer extends Player { platformPlayer().closeInventory(); } - @Override - public void sendPacket(Object packet) { - this.nettyChannel().writeAndFlush(packet); - } - @Override public void sendPacket(Object packet, boolean immediately) { this.plugin.networkManager().sendPacket(this, packet, immediately); @@ -305,7 +302,7 @@ public class BukkitServerPlayer extends Player { dataPayload = Reflections.constructor$DiscardedPayload.newInstance(channelKey, Unpooled.wrappedBuffer(data)); } Object responsePacket = Reflections.constructor$ClientboundCustomPayloadPacket.newInstance(dataPayload); - this.sendPacket(responsePacket); + this.sendPacket(responsePacket, true); } catch (Exception e) { CraftEngine.instance().logger().warn("Failed to send custom payload to " + name(), e); } @@ -316,7 +313,7 @@ public class BukkitServerPlayer extends Player { try { Object reason = ComponentUtils.adventureToMinecraft(message); Object kickPacket = Reflections.constructor$ClientboundDisconnectPacket.newInstance(reason); - this.sendPacket(kickPacket); + this.sendPacket(kickPacket, true); this.nettyChannel().disconnect(); } catch (Exception e) { CraftEngine.instance().logger().warn("Failed to kick " + name(), e); @@ -780,6 +777,11 @@ public class BukkitServerPlayer extends Player { return playerRef.get(); } + @Override + public Object connection() { + return this.connection; + } + @Override public org.bukkit.entity.Player literalObject() { return platformPlayer(); diff --git a/core/src/main/java/net/momirealms/craftengine/core/plugin/network/NetWorkUser.java b/core/src/main/java/net/momirealms/craftengine/core/plugin/network/NetWorkUser.java index a9d17c643..f12414157 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/plugin/network/NetWorkUser.java +++ b/core/src/main/java/net/momirealms/craftengine/core/plugin/network/NetWorkUser.java @@ -24,8 +24,6 @@ public interface NetWorkUser { void setUUID(UUID uuid); - void sendPacket(Object packet); - void sendPacket(Object packet, boolean immediately); void sendCustomPayload(Key channel, byte[] data); @@ -48,6 +46,8 @@ public interface NetWorkUser { Object platformPlayer(); + Object connection(); + Map entityPacketHandlers(); boolean clientModEnabled(); diff --git a/gradle.properties b/gradle.properties index 997049669..f48015a49 100644 --- a/gradle.properties +++ b/gradle.properties @@ -50,7 +50,7 @@ byte_buddy_version=1.17.5 ahocorasick_version=0.6.3 snake_yaml_version=2.4 anti_grief_version=0.17 -nms_helper_version=0.66.5 +nms_helper_version=0.66.6 evalex_version=3.5.0 reactive_streams_version=1.0.4 amazon_awssdk_version=2.31.23 From a35db2b8f47566512bcf4990c6d534f06cf399ca Mon Sep 17 00:00:00 2001 From: jhqwqmc <2110242767@qq.com> Date: Sat, 31 May 2025 16:31:36 +0800 Subject: [PATCH 2/2] =?UTF-8?q?refactor(network):=20=E9=87=8D=E6=9E=84?= =?UTF-8?q?=E5=8F=91=E9=80=81=E5=8C=85=E6=96=B9=E6=B3=95=E4=BB=A5=E4=BE=BF?= =?UTF-8?q?=E5=85=A8=E9=83=A8=E9=98=B6=E6=AE=B5=E9=83=BD=E5=8F=AF=E5=8F=91?= =?UTF-8?q?=E9=80=81=E5=8C=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../craftengine/bukkit/plugin/user/BukkitServerPlayer.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/user/BukkitServerPlayer.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/user/BukkitServerPlayer.java index 689762c7e..64090cc91 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/user/BukkitServerPlayer.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/user/BukkitServerPlayer.java @@ -302,7 +302,7 @@ public class BukkitServerPlayer extends Player { dataPayload = Reflections.constructor$DiscardedPayload.newInstance(channelKey, Unpooled.wrappedBuffer(data)); } Object responsePacket = Reflections.constructor$ClientboundCustomPayloadPacket.newInstance(dataPayload); - this.nettyChannel().writeAndFlush(responsePacket, true); + this.sendPacket(responsePacket, true); } catch (Exception e) { CraftEngine.instance().logger().warn("Failed to send custom payload to " + name(), e); } @@ -313,7 +313,7 @@ public class BukkitServerPlayer extends Player { try { Object reason = ComponentUtils.adventureToMinecraft(message); Object kickPacket = Reflections.constructor$ClientboundDisconnectPacket.newInstance(reason); - this.nettyChannel().writeAndFlush(kickPacket, true); + this.sendPacket(kickPacket, true); this.nettyChannel().disconnect(); } catch (Exception e) { CraftEngine.instance().logger().warn("Failed to kick " + name(), e);