From 8b894c088c2b8149a29353aec5b38ba0a17dd247 Mon Sep 17 00:00:00 2001 From: jhqwqmc <2110242767@qq.com> Date: Mon, 7 Apr 2025 11:10:16 +0800 Subject: [PATCH 1/8] =?UTF-8?q?refactor(network):=20=E9=A2=84=E4=BF=AE?= =?UTF-8?q?=E6=94=B9SYNC=5FENTITY=5FPOSITION?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../plugin/network/BukkitNetworkManager.java | 2 ++ .../plugin/network/PacketConsumers.java | 21 +++++++++++++------ .../bukkit/plugin/network/PacketIds.java | 2 ++ .../plugin/network/impl/PacketIdFinder.java | 2 +- .../plugin/network/impl/PacketIds1_20.java | 5 +++++ .../plugin/network/impl/PacketIds1_20_2.java | 5 +++++ .../plugin/network/impl/PacketIds1_20_3.java | 5 +++++ .../plugin/network/impl/PacketIds1_20_5.java | 5 +++++ .../plugin/network/impl/PacketIds1_21.java | 5 +++++ 9 files changed, 45 insertions(+), 7 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 b1c8bc67f..8b55761d7 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 @@ -46,6 +46,7 @@ public class BukkitNetworkManager implements NetworkManager, Listener, PluginMes } private static void registerByteBufPacketConsumer(final BiConsumer function, int id) { + if (id == -1) return; BYTE_BUFFER_PACKET_HANDLERS.put(id, function); } @@ -156,6 +157,7 @@ public class BukkitNetworkManager implements NetworkManager, Listener, PluginMes registerByteBufPacketConsumer(PacketConsumers.LEVEL_PARTICLE, this.packetIds.clientboundLevelParticlesPacket()); registerByteBufPacketConsumer(PacketConsumers.LEVEL_EVENT, this.packetIds.clientboundLevelEventPacket()); registerByteBufPacketConsumer(PacketConsumers.OPEN_SCREEN, this.packetIds.clientboundOpenScreenPacket()); + // registerByteBufPacketConsumer(PacketConsumers.SYNC_ENTITY_POSITION, this.packetIds.clientboundEntityPositionSyncPacket()); } public static BukkitNetworkManager instance() { 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 c99cf53b3..14a37b6e3 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 @@ -243,10 +243,10 @@ public class PacketConsumers { public static final BiConsumer OPEN_SCREEN = (user, event) -> { try { + FriendlyByteBuf buf = event.getBuffer(); + int containerId = buf.readVarInt(); + int type = buf.readVarInt(); if (VersionHelper.isVersionNewerThan1_20_3()) { - FriendlyByteBuf buf = event.getBuffer(); - int containerId = buf.readVarInt(); - int type = buf.readVarInt(); Tag nbt = buf.readNbt(false); if (nbt == null) return; Map tokens = CraftEngine.instance().imageManager().matchTags(nbt.getAsString()); @@ -261,9 +261,6 @@ public class PacketConsumers { buf.writeVarInt(type); buf.writeNbt(NBTComponentSerializer.nbt().serialize(component), false); } else { - FriendlyByteBuf buf = event.getBuffer(); - int containerId = buf.readVarInt(); - int type = buf.readVarInt(); String json = buf.readUtf(); Map tokens = CraftEngine.instance().imageManager().matchTags(json); if (tokens.isEmpty()) return; @@ -695,6 +692,17 @@ public class PacketConsumers { // 1.21.3+ // TODO USE bytebuffer + // public static final BiConsumer OPEN_SCREEN = (user, event) -> { + // try { + // FriendlyByteBuf buf = event.getBuffer(); + // int entityId = buf.readVarInt(); + // if (BukkitFurnitureManager.instance().isFurnitureRealEntity(entityId)) { + // event.setCancelled(true); + // } + // } catch (Exception e) { + // CraftEngine.instance().logger().warn("Failed to handle ClientboundEntityPositionSyncPacket", e); + // } + // }; public static final TriConsumer SYNC_ENTITY_POSITION = (user, event, packet) -> { try { int entityId = (int) Reflections.field$ClientboundEntityPositionSyncPacket$id.get(packet); @@ -1001,6 +1009,7 @@ public class PacketConsumers { ); user.nettyChannel().writeAndFlush(kickPacket); user.nettyChannel().disconnect(); + return; } user.setClientModState(true); } diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/PacketIds.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/PacketIds.java index ca7338f6b..d560aa1d1 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/PacketIds.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/PacketIds.java @@ -13,4 +13,6 @@ public interface PacketIds { int clientboundAddEntityPacket(); int clientboundOpenScreenPacket(); + + int clientboundEntityPositionSyncPacket(); } diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/impl/PacketIdFinder.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/impl/PacketIdFinder.java index d7db35e57..eea73d2ec 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/impl/PacketIdFinder.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/impl/PacketIdFinder.java @@ -28,6 +28,6 @@ public class PacketIdFinder { } public static int clientboundByName(String packetName) { - return gamePacketIds.get("clientbound").get(packetName); + return gamePacketIds.get("clientbound").getOrDefault(packetName, -1); } } diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/impl/PacketIds1_20.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/impl/PacketIds1_20.java index e833e4d8c..4a501c330 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/impl/PacketIds1_20.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/impl/PacketIds1_20.java @@ -33,4 +33,9 @@ public class PacketIds1_20 implements PacketIds { public int clientboundOpenScreenPacket() { return 48; } + + @Override + public int clientboundEntityPositionSyncPacket() { + return -1; + } } diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/impl/PacketIds1_20_2.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/impl/PacketIds1_20_2.java index c4d740242..ff30aa2ca 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/impl/PacketIds1_20_2.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/impl/PacketIds1_20_2.java @@ -33,4 +33,9 @@ public class PacketIds1_20_2 implements PacketIds { public int clientboundOpenScreenPacket() { return 49; } + + @Override + public int clientboundEntityPositionSyncPacket() { + return -1; + } } diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/impl/PacketIds1_20_3.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/impl/PacketIds1_20_3.java index c18291673..284377e77 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/impl/PacketIds1_20_3.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/impl/PacketIds1_20_3.java @@ -33,4 +33,9 @@ public class PacketIds1_20_3 implements PacketIds { public int clientboundOpenScreenPacket() { return 49; } + + @Override + public int clientboundEntityPositionSyncPacket() { + return -1; + } } diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/impl/PacketIds1_20_5.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/impl/PacketIds1_20_5.java index 70e909fd6..ef0f54612 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/impl/PacketIds1_20_5.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/impl/PacketIds1_20_5.java @@ -33,4 +33,9 @@ public class PacketIds1_20_5 implements PacketIds { public int clientboundOpenScreenPacket() { return 51; } + + @Override + public int clientboundEntityPositionSyncPacket() { + return -1; + } } diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/impl/PacketIds1_21.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/impl/PacketIds1_21.java index 8d1417f2a..41afe8ae1 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/impl/PacketIds1_21.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/impl/PacketIds1_21.java @@ -33,4 +33,9 @@ public class PacketIds1_21 implements PacketIds { public int clientboundOpenScreenPacket() { return PacketIdFinder.clientboundByName("minecraft:open_screen"); } + + @Override + public int clientboundEntityPositionSyncPacket() { + return PacketIdFinder.clientboundByName("minecraft:entity_position_sync"); + } } From 74743ee25b2fec40c7597e353c98c91aa108b03c Mon Sep 17 00:00:00 2001 From: jhqwqmc <2110242767@qq.com> Date: Mon, 7 Apr 2025 11:11:27 +0800 Subject: [PATCH 2/8] =?UTF-8?q?refactor(network):=20=E9=A2=84=E4=BF=AE?= =?UTF-8?q?=E6=94=B9SYNC=5FENTITY=5FPOSITION?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../craftengine/bukkit/plugin/network/PacketConsumers.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 14a37b6e3..dd843561a 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 @@ -697,7 +697,7 @@ public class PacketConsumers { // FriendlyByteBuf buf = event.getBuffer(); // int entityId = buf.readVarInt(); // if (BukkitFurnitureManager.instance().isFurnitureRealEntity(entityId)) { - // event.setCancelled(true); + // event.setCancelled(true); // 这里炸了导致无法实现 // } // } catch (Exception e) { // CraftEngine.instance().logger().warn("Failed to handle ClientboundEntityPositionSyncPacket", e); From 1e8b7e0607e0d42a2ba893e4bad7a8837ef3eb46 Mon Sep 17 00:00:00 2001 From: jhqwqmc <2110242767@qq.com> Date: Mon, 7 Apr 2025 18:17:17 +0800 Subject: [PATCH 3/8] =?UTF-8?q?refactor(network):=20=E9=87=8D=E6=9E=84?= =?UTF-8?q?=E5=AE=9E=E4=BD=93=E7=9B=B8=E5=85=B3=E7=9A=84=E7=BD=91=E7=BB=9C?= =?UTF-8?q?=E5=8C=85=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../plugin/network/BukkitNetworkManager.java | 9 ++- .../plugin/network/PacketConsumers.java | 78 ++++++++++++------- .../bukkit/plugin/network/PacketIds.java | 2 + .../plugin/network/impl/PacketIds1_20.java | 5 ++ .../plugin/network/impl/PacketIds1_20_2.java | 5 ++ .../plugin/network/impl/PacketIds1_20_3.java | 5 ++ .../plugin/network/impl/PacketIds1_20_5.java | 5 ++ .../plugin/network/impl/PacketIds1_21.java | 5 ++ .../craftengine/bukkit/util/Reflections.java | 18 +++++ gradle.properties | 2 +- 10 files changed, 101 insertions(+), 33 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 8b55761d7..4cb0324bf 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 @@ -141,7 +141,7 @@ public class BukkitNetworkManager implements NetworkManager, Listener, PluginMes registerNMSPacketConsumer(PacketConsumers.LOGIN, Reflections.clazz$ClientboundLoginPacket); registerNMSPacketConsumer(PacketConsumers.RESPAWN, Reflections.clazz$ClientboundRespawnPacket); registerNMSPacketConsumer(PacketConsumers.INTERACT_ENTITY, Reflections.clazz$ServerboundInteractPacket); - registerNMSPacketConsumer(PacketConsumers.REMOVE_ENTITY, Reflections.clazz$ClientboundRemoveEntitiesPacket); + // registerNMSPacketConsumer(PacketConsumers.REMOVE_ENTITY, Reflections.clazz$ClientboundRemoveEntitiesPacket); registerNMSPacketConsumer(PacketConsumers.SYNC_ENTITY_POSITION, Reflections.clazz$ClientboundEntityPositionSyncPacket); registerNMSPacketConsumer(PacketConsumers.MOVE_ENTITY, Reflections.clazz$ClientboundMoveEntityPacket$Pos); registerNMSPacketConsumer(PacketConsumers.PICK_ITEM_FROM_ENTITY, Reflections.clazz$ServerboundPickItemFromEntityPacket); @@ -157,7 +157,8 @@ public class BukkitNetworkManager implements NetworkManager, Listener, PluginMes registerByteBufPacketConsumer(PacketConsumers.LEVEL_PARTICLE, this.packetIds.clientboundLevelParticlesPacket()); registerByteBufPacketConsumer(PacketConsumers.LEVEL_EVENT, this.packetIds.clientboundLevelEventPacket()); registerByteBufPacketConsumer(PacketConsumers.OPEN_SCREEN, this.packetIds.clientboundOpenScreenPacket()); - // registerByteBufPacketConsumer(PacketConsumers.SYNC_ENTITY_POSITION, this.packetIds.clientboundEntityPositionSyncPacket()); + registerByteBufPacketConsumer(PacketConsumers.REMOVE_ENTITY, this.packetIds.clientboundRemoveEntitiesPacket()); + registerByteBufPacketConsumer(PacketConsumers.ADD_ENTITY_BYTEBUFFER, this.packetIds.clientboundAddEntityPacket()); } public static BukkitNetworkManager instance() { @@ -483,7 +484,9 @@ public class BukkitNetworkManager implements NetworkManager, Listener, PluginMes } if (byteBuf.isReadable()) { list.add(byteBuf.retain()); - } + }/* else { + list.add(io.netty.buffer.Unpooled.EMPTY_BUFFER); + }*/ } private boolean handleCompression(ChannelHandlerContext ctx, ByteBuf buffer) { 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 dd843561a..3f23869ae 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 @@ -652,18 +652,54 @@ public class PacketConsumers { Reflections.field$ServerPlayer$connection.get(FastNMS.INSTANCE.method$CraftPlayer$getHandle(player)), FastNMS.INSTANCE.method$CraftItemStack$asNMSCopy(itemStack)); } - // TODO USE bytebuffer + public static final BiConsumer ADD_ENTITY_BYTEBUFFER = (user, event) -> { + try { + FriendlyByteBuf buf = event.getBuffer(); + int id = buf.readVarInt(); + UUID uuid = buf.readUUID(); + int type = buf.readVarInt(); + double x = buf.readDouble(); + double y = buf.readDouble(); + double z = buf.readDouble(); + byte xRot = buf.readByte(); + byte yRot = buf.readByte(); + byte yHeadRot = buf.readByte(); + int data = buf.readVarInt(); + int xa = buf.readShort(); + int ya = buf.readShort(); + int za = buf.readShort(); + // Falling blocks + if (type == Reflections.instance$EntityType$FALLING_BLOCK$registryId) { + int remapped = remap(data); + if (remapped != data) { + buf.clear(); + buf.writeVarInt(event.packetID()); + buf.writeVarInt(id); + buf.writeUUID(uuid); + buf.writeVarInt(type); + buf.writeDouble(x); + buf.writeDouble(y); + buf.writeDouble(z); + buf.writeByte(xRot); + buf.writeByte(yRot); + buf.writeByte(yHeadRot); + buf.writeVarInt(remapped); + buf.writeShort(xa); + buf.writeShort(ya); + buf.writeShort(za); + } + } else if (type == Reflections.instance$EntityType$BLOCK_DISPLAY$registryId) { + user.entityView().put(id, Reflections.instance$EntityType$BLOCK_DISPLAY); + } + } catch (Exception e) { + CraftEngine.instance().logger().warn("Failed to handle ClientboundAddEntityPacket", e); + } + }; + public static final TriConsumer ADD_ENTITY = (user, event, packet) -> { try { Object entityType = FastNMS.INSTANCE.field$ClientboundAddEntityPacket$type(packet); - // Falling blocks - if (entityType == Reflections.instance$EntityType$FALLING_BLOCK) { - int data = FastNMS.INSTANCE.field$ClientboundAddEntityPacket$data(packet); - int remapped = remap(data); - if (remapped != data) { - Reflections.field$ClientboundAddEntityPacket$data.set(packet, remapped); - } - } else if (entityType == Reflections.instance$EntityType$ITEM_DISPLAY) { + if (entityType == Reflections.instance$EntityType$ITEM_DISPLAY) { // Furniture int entityId = FastNMS.INSTANCE.field$ClientboundAddEntityPacket$entityId(packet); LoadedFurniture furniture = BukkitFurnitureManager.instance().loadedFurnitureByRealEntityId(entityId); @@ -681,9 +717,6 @@ public class PacketConsumers { if (furniture != null) { event.setCancelled(true); } - } else if (entityType == Reflections.instance$EntityType$BLOCK_DISPLAY) { - int entityId = FastNMS.INSTANCE.field$ClientboundAddEntityPacket$entityId(packet); - user.entityView().put(entityId, entityType); } } catch (Exception e) { CraftEngine.instance().logger().warn("Failed to handle ClientboundAddEntityPacket", e); @@ -691,21 +724,9 @@ public class PacketConsumers { }; // 1.21.3+ - // TODO USE bytebuffer - // public static final BiConsumer OPEN_SCREEN = (user, event) -> { - // try { - // FriendlyByteBuf buf = event.getBuffer(); - // int entityId = buf.readVarInt(); - // if (BukkitFurnitureManager.instance().isFurnitureRealEntity(entityId)) { - // event.setCancelled(true); // 这里炸了导致无法实现 - // } - // } catch (Exception e) { - // CraftEngine.instance().logger().warn("Failed to handle ClientboundEntityPositionSyncPacket", e); - // } - // }; public static final TriConsumer SYNC_ENTITY_POSITION = (user, event, packet) -> { try { - int entityId = (int) Reflections.field$ClientboundEntityPositionSyncPacket$id.get(packet); + int entityId = FastNMS.INSTANCE.method$ClientboundEntityPositionSyncPacket$id(packet); if (BukkitFurnitureManager.instance().isFurnitureRealEntity(entityId)) { event.setCancelled(true); } @@ -714,7 +735,6 @@ public class PacketConsumers { } }; - // TODO USE bytebuffer public static final TriConsumer MOVE_ENTITY = (user, event, packet) -> { try { int entityId = (int) Reflections.field$ClientboundMoveEntityPacket$entityId.get(packet); @@ -726,10 +746,10 @@ public class PacketConsumers { } }; - // TODO USE bytebuffer - public static final TriConsumer REMOVE_ENTITY = (user, event, packet) -> { + public static final BiConsumer REMOVE_ENTITY = (user, event) -> { try { - IntList intList = FastNMS.INSTANCE.field$ClientboundRemoveEntitiesPacket$entityIds(packet); + FriendlyByteBuf buf = event.getBuffer(); + IntList intList = buf.readIntIdList(); for (int i = 0, size = intList.size(); i < size; i++) { List entities = user.furnitureView().remove(intList.getInt(i)); if (entities == null) continue; diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/PacketIds.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/PacketIds.java index d560aa1d1..92bd4c108 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/PacketIds.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/PacketIds.java @@ -15,4 +15,6 @@ public interface PacketIds { int clientboundOpenScreenPacket(); int clientboundEntityPositionSyncPacket(); + + int clientboundRemoveEntitiesPacket(); } diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/impl/PacketIds1_20.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/impl/PacketIds1_20.java index 4a501c330..b299a92c5 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/impl/PacketIds1_20.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/impl/PacketIds1_20.java @@ -38,4 +38,9 @@ public class PacketIds1_20 implements PacketIds { public int clientboundEntityPositionSyncPacket() { return -1; } + + @Override + public int clientboundRemoveEntitiesPacket() { + return 62; + } } diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/impl/PacketIds1_20_2.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/impl/PacketIds1_20_2.java index ff30aa2ca..e4774319e 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/impl/PacketIds1_20_2.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/impl/PacketIds1_20_2.java @@ -38,4 +38,9 @@ public class PacketIds1_20_2 implements PacketIds { public int clientboundEntityPositionSyncPacket() { return -1; } + + @Override + public int clientboundRemoveEntitiesPacket() { + return 64; + } } diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/impl/PacketIds1_20_3.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/impl/PacketIds1_20_3.java index 284377e77..4d1a66b7d 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/impl/PacketIds1_20_3.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/impl/PacketIds1_20_3.java @@ -38,4 +38,9 @@ public class PacketIds1_20_3 implements PacketIds { public int clientboundEntityPositionSyncPacket() { return -1; } + + @Override + public int clientboundRemoveEntitiesPacket() { + return 64; + } } diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/impl/PacketIds1_20_5.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/impl/PacketIds1_20_5.java index ef0f54612..df520e0f3 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/impl/PacketIds1_20_5.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/impl/PacketIds1_20_5.java @@ -38,4 +38,9 @@ public class PacketIds1_20_5 implements PacketIds { public int clientboundEntityPositionSyncPacket() { return -1; } + + @Override + public int clientboundRemoveEntitiesPacket() { + return 66; + } } diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/impl/PacketIds1_21.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/impl/PacketIds1_21.java index 41afe8ae1..48b07e5fd 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/impl/PacketIds1_21.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/impl/PacketIds1_21.java @@ -38,4 +38,9 @@ public class PacketIds1_21 implements PacketIds { public int clientboundEntityPositionSyncPacket() { return PacketIdFinder.clientboundByName("minecraft:entity_position_sync"); } + + @Override + public int clientboundRemoveEntitiesPacket() { + return PacketIdFinder.clientboundByName("minecraft:remove_entities"); + } } 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 46cdb16c4..487d633b3 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 @@ -6264,4 +6264,22 @@ public class Reflections { public static final Field field$ClientInformation$particleStatus = Optional.ofNullable(clazz$ClientInformation) .map(it -> ReflectionUtils.getDeclaredField(it, 8)) .orElse(null); + + public static final Method method$Registry$getId = requireNonNull( + ReflectionUtils.getMethod(clazz$Registry, int.class, Object.class) + ); + + public static final int instance$EntityType$FALLING_BLOCK$registryId; + public static final int instance$EntityType$BLOCK_DISPLAY$registryId; + + static { + try { + Object blockDisplay = method$ResourceLocation$fromNamespaceAndPath.invoke(null, "minecraft", "block_display"); + instance$EntityType$BLOCK_DISPLAY$registryId = (int) Reflections.method$Registry$getId.invoke(Reflections.instance$BuiltInRegistries$ENTITY_TYPE, blockDisplay); + Object fallingBlock = method$ResourceLocation$fromNamespaceAndPath.invoke(null, "minecraft", "falling_block"); + instance$EntityType$FALLING_BLOCK$registryId = (int) Reflections.method$Registry$getId.invoke(Reflections.instance$BuiltInRegistries$ENTITY_TYPE, fallingBlock); + } catch (Exception e) { + throw new RuntimeException(e); + } + } } diff --git a/gradle.properties b/gradle.properties index a80c87bb7..700cc6878 100644 --- a/gradle.properties +++ b/gradle.properties @@ -51,7 +51,7 @@ byte_buddy_version=1.17.5 ahocorasick_version=0.6.3 snake_yaml_version=2.4 anti_grief_version=0.13 -nms_helper_version=0.43 +nms_helper_version=0.44 # Ignite Dependencies mixinextras_version=0.4.1 mixin_version=0.15.2+mixin.0.8.7 From 0ae08a496a416be0965999e7f94b9baf1b7bb232 Mon Sep 17 00:00:00 2001 From: jhqwqmc <2110242767@qq.com> Date: Mon, 7 Apr 2025 22:07:16 +0800 Subject: [PATCH 4/8] =?UTF-8?q?refactor(network):=20=E9=87=8D=E6=9E=84?= =?UTF-8?q?=E5=AE=9E=E4=BD=93=E7=9B=B8=E5=85=B3=E7=9A=84=E7=BD=91=E7=BB=9C?= =?UTF-8?q?=E5=8C=85=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../plugin/network/BukkitNetworkManager.java | 6 +- .../plugin/network/PacketConsumers.java | 117 ++++++++++++------ .../bukkit/plugin/network/PacketIds.java | 4 +- .../plugin/network/impl/PacketIds1_20.java | 9 +- .../plugin/network/impl/PacketIds1_20_2.java | 9 +- .../plugin/network/impl/PacketIds1_20_3.java | 9 +- .../plugin/network/impl/PacketIds1_20_5.java | 9 +- .../plugin/network/impl/PacketIds1_21.java | 9 +- .../craftengine/bukkit/util/Reflections.java | 21 +++- 9 files changed, 140 insertions(+), 53 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 4cb0324bf..5a247e1a2 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 @@ -141,7 +141,7 @@ public class BukkitNetworkManager implements NetworkManager, Listener, PluginMes registerNMSPacketConsumer(PacketConsumers.LOGIN, Reflections.clazz$ClientboundLoginPacket); registerNMSPacketConsumer(PacketConsumers.RESPAWN, Reflections.clazz$ClientboundRespawnPacket); registerNMSPacketConsumer(PacketConsumers.INTERACT_ENTITY, Reflections.clazz$ServerboundInteractPacket); - // registerNMSPacketConsumer(PacketConsumers.REMOVE_ENTITY, Reflections.clazz$ClientboundRemoveEntitiesPacket); + registerNMSPacketConsumer(PacketConsumers.REMOVE_ENTITY, Reflections.clazz$ClientboundRemoveEntitiesPacket); registerNMSPacketConsumer(PacketConsumers.SYNC_ENTITY_POSITION, Reflections.clazz$ClientboundEntityPositionSyncPacket); registerNMSPacketConsumer(PacketConsumers.MOVE_ENTITY, Reflections.clazz$ClientboundMoveEntityPacket$Pos); registerNMSPacketConsumer(PacketConsumers.PICK_ITEM_FROM_ENTITY, Reflections.clazz$ServerboundPickItemFromEntityPacket); @@ -157,8 +157,10 @@ public class BukkitNetworkManager implements NetworkManager, Listener, PluginMes registerByteBufPacketConsumer(PacketConsumers.LEVEL_PARTICLE, this.packetIds.clientboundLevelParticlesPacket()); registerByteBufPacketConsumer(PacketConsumers.LEVEL_EVENT, this.packetIds.clientboundLevelEventPacket()); registerByteBufPacketConsumer(PacketConsumers.OPEN_SCREEN, this.packetIds.clientboundOpenScreenPacket()); - registerByteBufPacketConsumer(PacketConsumers.REMOVE_ENTITY, this.packetIds.clientboundRemoveEntitiesPacket()); + // registerByteBufPacketConsumer(PacketConsumers.REMOVE_ENTITY, this.packetIds.clientboundRemoveEntitiesPacket()); registerByteBufPacketConsumer(PacketConsumers.ADD_ENTITY_BYTEBUFFER, this.packetIds.clientboundAddEntityPacket()); + // registerByteBufPacketConsumer(PacketConsumers.SOUND, this.packetIds.clientboundSoundPacket()); + // registerByteBufPacketConsumer(PacketConsumers.SET_ENTITY_DATA, this.packetIds.clientboundSetEntityDataPacket()); } public static BukkitNetworkManager instance() { 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 c997fa049..84a60b157 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 @@ -673,6 +673,7 @@ public class PacketConsumers { if (type == Reflections.instance$EntityType$FALLING_BLOCK$registryId) { int remapped = remap(data); if (remapped != data) { + event.setChanged(true); buf.clear(); buf.writeVarInt(event.packetID()); buf.writeVarInt(id); @@ -747,12 +748,13 @@ public class PacketConsumers { } }; - public static final BiConsumer REMOVE_ENTITY = (user, event) -> { + // TODO USE bytebuffer + public static final TriConsumer REMOVE_ENTITY = (user, event, packet) -> { try { - FriendlyByteBuf buf = event.getBuffer(); - IntList intList = buf.readIntIdList(); + IntList intList = FastNMS.INSTANCE.field$ClientboundRemoveEntitiesPacket$entityIds(packet); for (int i = 0, size = intList.size(); i < size; i++) { List entities = user.furnitureView().remove(intList.getInt(i)); + System.out.println("Removing " + entities); if (entities == null) continue; for (int entityId : entities) { intList.add(entityId); @@ -1039,38 +1041,83 @@ public class PacketConsumers { } }; - // TODO 使用bytebuffer -// public static final TriConsumer SET_ENTITY_DATA = (user, event, packet) -> { -// try { -// int id = FastNMS.INSTANCE.field$ClientboundSetEntityDataPacket$id(packet); -// Object entityType = user.entityView().get(id); -// if (entityType == Reflections.instance$EntityType$BLOCK_DISPLAY) { -// List packedItems = FastNMS.INSTANCE.field$ClientboundSetEntityDataPacket$packedItems(packet); -// for (int i = 0; i < packedItems.size(); i++) { -// Object packedItem = packedItems.get(i); -// int entityDataId = FastNMS.INSTANCE.field$SynchedEntityData$DataValue$id(packedItem); -// if (entityDataId != EntityDataUtils.BLOCK_STATE_DATA_ID) { -// continue; -// } -// Object blockState = FastNMS.INSTANCE.field$SynchedEntityData$DataValue$value(packedItem); -// int stateId = BlockStateUtils.blockStateToId(blockState); -// int newStateId; -// if (!user.clientModEnabled()) { -// newStateId = remap(stateId); -// } else { -// newStateId = remapMOD(stateId); -// } -// Object serializer = FastNMS.INSTANCE.field$SynchedEntityData$DataValue$serializer(packedItem); -// packedItems.set(i, FastNMS.INSTANCE.constructor$SynchedEntityData$DataValue( -// entityDataId, serializer, BlockStateUtils.idToBlockState(newStateId) -// )); -// break; -// } -// } -// } catch (Exception e) { -// CraftEngine.instance().logger().warn("Failed to handle ClientboundSetEntityDataPacket", e); -// } -// }; + + // TODO 需要修复 + // @SuppressWarnings("unchecked") + // public static final BiConsumer SET_ENTITY_DATA = (user, event) -> { + // try { + // FriendlyByteBuf buf = event.getBuffer(); + // int id = buf.readVarInt(); + // Object entityType = user.entityView().get(id); + // if (entityType == Reflections.instance$EntityType$BLOCK_DISPLAY) { + // Object registryFriendlyByteBuf = FastNMS.INSTANCE.constructor$RegistryFriendlyByteBuf(buf, Reflections.instance$registryAccess); + // boolean isChanged = false; + // List packedItems = (List) Reflections.method$ClientboundSetEntityDataPacket$unpack.invoke(null, registryFriendlyByteBuf); + // for (int i = 0; i < packedItems.size(); i++) { + // Object packedItem = packedItems.get(i); + // int entityDataId = FastNMS.INSTANCE.field$SynchedEntityData$DataValue$id(packedItem); + // if (entityDataId != EntityDataUtils.BLOCK_STATE_DATA_ID) { + // continue; + // } + // Object blockState = FastNMS.INSTANCE.field$SynchedEntityData$DataValue$value(packedItem); + // int stateId = BlockStateUtils.blockStateToId(blockState); + // int newStateId; + // if (!user.clientModEnabled()) { + // newStateId = remap(stateId); + // } else { + // newStateId = remapMOD(stateId); + // } + // Object serializer = FastNMS.INSTANCE.field$SynchedEntityData$DataValue$serializer(packedItem); + // packedItems.set(i, FastNMS.INSTANCE.constructor$SynchedEntityData$DataValue( + // entityDataId, serializer, BlockStateUtils.idToBlockState(newStateId) + // )); + // isChanged = true; + // break; + // } + // if (isChanged) { + // System.out.println("Changed"); + // event.setChanged(true); + // buf.clear(); + // buf.writeVarInt(event.packetID()); + // Reflections.method$ClientboundSetEntityDataPacket$pack.invoke(null, packedItems, registryFriendlyByteBuf); + // } + // } + // } catch (Exception e) { + // CraftEngine.instance().logger().warn("Failed to handle ClientboundSetEntityDataPacket", e); + // } + // }; + // 之前的旧东西经供参考需要改成使用bytebuffer的 + // public static final TriConsumer SET_ENTITY_DATA = (user, event, packet) -> { + // try { + // int id = FastNMS.INSTANCE.field$ClientboundSetEntityDataPacket$id(packet); + // Object entityType = user.entityView().get(id); + // if (entityType == Reflections.instance$EntityType$BLOCK_DISPLAY) { + // List packedItems = FastNMS.INSTANCE.field$ClientboundSetEntityDataPacket$packedItems(packet); + // for (int i = 0; i < packedItems.size(); i++) { + // Object packedItem = packedItems.get(i); + // int entityDataId = FastNMS.INSTANCE.field$SynchedEntityData$DataValue$id(packedItem); + // if (entityDataId != EntityDataUtils.BLOCK_STATE_DATA_ID) { + // continue; + // } + // Object blockState = FastNMS.INSTANCE.field$SynchedEntityData$DataValue$value(packedItem); + // int stateId = BlockStateUtils.blockStateToId(blockState); + // int newStateId; + // if (!user.clientModEnabled()) { + // newStateId = remap(stateId); + // } else { + // newStateId = remapMOD(stateId); + // } + // Object serializer = FastNMS.INSTANCE.field$SynchedEntityData$DataValue$serializer(packedItem); + // packedItems.set(i, FastNMS.INSTANCE.constructor$SynchedEntityData$DataValue( + // entityDataId, serializer, BlockStateUtils.idToBlockState(newStateId) + // )); + // break; + // } + // } + // } catch (Exception e) { + // CraftEngine.instance().logger().warn("Failed to handle ClientboundSetEntityDataPacket", e); + // } + // }; // public static final TriConsumer OPEN_SCREEN = (user, event, packet) -> { // try { diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/PacketIds.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/PacketIds.java index 92bd4c108..bc89467c1 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/PacketIds.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/PacketIds.java @@ -14,7 +14,9 @@ public interface PacketIds { int clientboundOpenScreenPacket(); - int clientboundEntityPositionSyncPacket(); + int clientboundSoundPacket(); int clientboundRemoveEntitiesPacket(); + + int clientboundSetEntityDataPacket(); } diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/impl/PacketIds1_20.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/impl/PacketIds1_20.java index b299a92c5..418af0473 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/impl/PacketIds1_20.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/impl/PacketIds1_20.java @@ -35,12 +35,17 @@ public class PacketIds1_20 implements PacketIds { } @Override - public int clientboundEntityPositionSyncPacket() { - return -1; + public int clientboundSoundPacket() { + return 98; } @Override public int clientboundRemoveEntitiesPacket() { return 62; } + + @Override + public int clientboundSetEntityDataPacket() { + return 82; + } } diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/impl/PacketIds1_20_2.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/impl/PacketIds1_20_2.java index e4774319e..a79c2a0ea 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/impl/PacketIds1_20_2.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/impl/PacketIds1_20_2.java @@ -35,12 +35,17 @@ public class PacketIds1_20_2 implements PacketIds { } @Override - public int clientboundEntityPositionSyncPacket() { - return -1; + public int clientboundSoundPacket() { + return 100; } @Override public int clientboundRemoveEntitiesPacket() { return 64; } + + @Override + public int clientboundSetEntityDataPacket() { + return 84; + } } diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/impl/PacketIds1_20_3.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/impl/PacketIds1_20_3.java index 4d1a66b7d..dcae35e59 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/impl/PacketIds1_20_3.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/impl/PacketIds1_20_3.java @@ -35,12 +35,17 @@ public class PacketIds1_20_3 implements PacketIds { } @Override - public int clientboundEntityPositionSyncPacket() { - return -1; + public int clientboundSoundPacket() { + return 102; } @Override public int clientboundRemoveEntitiesPacket() { return 64; } + + @Override + public int clientboundSetEntityDataPacket() { + return 86; + } } diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/impl/PacketIds1_20_5.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/impl/PacketIds1_20_5.java index df520e0f3..d6da5f830 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/impl/PacketIds1_20_5.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/impl/PacketIds1_20_5.java @@ -35,12 +35,17 @@ public class PacketIds1_20_5 implements PacketIds { } @Override - public int clientboundEntityPositionSyncPacket() { - return -1; + public int clientboundSoundPacket() { + return 104; } @Override public int clientboundRemoveEntitiesPacket() { return 66; } + + @Override + public int clientboundSetEntityDataPacket() { + return 88; + } } diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/impl/PacketIds1_21.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/impl/PacketIds1_21.java index 48b07e5fd..944d99a1a 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/impl/PacketIds1_21.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/impl/PacketIds1_21.java @@ -35,12 +35,17 @@ public class PacketIds1_21 implements PacketIds { } @Override - public int clientboundEntityPositionSyncPacket() { - return PacketIdFinder.clientboundByName("minecraft:entity_position_sync"); + public int clientboundSoundPacket() { + return PacketIdFinder.clientboundByName("minecraft:sound"); } @Override public int clientboundRemoveEntitiesPacket() { return PacketIdFinder.clientboundByName("minecraft:remove_entities"); } + + @Override + public int clientboundSetEntityDataPacket() { + return PacketIdFinder.clientboundByName("minecraft:set_entity_data"); + } } 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 487d633b3..282888557 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 @@ -6269,17 +6269,28 @@ public class Reflections { ReflectionUtils.getMethod(clazz$Registry, int.class, Object.class) ); - public static final int instance$EntityType$FALLING_BLOCK$registryId; public static final int instance$EntityType$BLOCK_DISPLAY$registryId; + public static final int instance$EntityType$FALLING_BLOCK$registryId; static { try { - Object blockDisplay = method$ResourceLocation$fromNamespaceAndPath.invoke(null, "minecraft", "block_display"); - instance$EntityType$BLOCK_DISPLAY$registryId = (int) Reflections.method$Registry$getId.invoke(Reflections.instance$BuiltInRegistries$ENTITY_TYPE, blockDisplay); - Object fallingBlock = method$ResourceLocation$fromNamespaceAndPath.invoke(null, "minecraft", "falling_block"); - instance$EntityType$FALLING_BLOCK$registryId = (int) Reflections.method$Registry$getId.invoke(Reflections.instance$BuiltInRegistries$ENTITY_TYPE, fallingBlock); + instance$EntityType$BLOCK_DISPLAY$registryId = (int) Reflections.method$Registry$getId.invoke(Reflections.instance$BuiltInRegistries$ENTITY_TYPE, instance$EntityType$BLOCK_DISPLAY); + instance$EntityType$FALLING_BLOCK$registryId = (int) Reflections.method$Registry$getId.invoke(Reflections.instance$BuiltInRegistries$ENTITY_TYPE, instance$EntityType$FALLING_BLOCK); } catch (Exception e) { throw new RuntimeException(e); } } + + // 先注释后面再说 + // public static final Method method$ClientboundSetEntityDataPacket$pack = requireNonNull( + // ReflectionUtils.getDeclaredMethod( + // clazz$ClientboundSetEntityDataPacket, void.class, List.class, clazz$RegistryFriendlyByteBuf + // ) + // ); + // + // public static final Method method$ClientboundSetEntityDataPacket$unpack = requireNonNull( + // ReflectionUtils.getDeclaredMethod( + // clazz$ClientboundSetEntityDataPacket, List.class, clazz$RegistryFriendlyByteBuf + // ) + // ); } From 3e17dd9e22c063e2219d79e81ac78dc0168ce999 Mon Sep 17 00:00:00 2001 From: jhqwqmc <2110242767@qq.com> Date: Mon, 7 Apr 2025 22:11:28 +0800 Subject: [PATCH 5/8] =?UTF-8?q?clean(network):=20=E6=B8=85=E7=90=86?= =?UTF-8?q?=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../bukkit/plugin/network/BukkitNetworkManager.java | 4 +--- .../craftengine/bukkit/plugin/network/PacketConsumers.java | 2 +- 2 files changed, 2 insertions(+), 4 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 5a247e1a2..bcb2ff7c4 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 @@ -486,9 +486,7 @@ public class BukkitNetworkManager implements NetworkManager, Listener, PluginMes } if (byteBuf.isReadable()) { list.add(byteBuf.retain()); - }/* else { - list.add(io.netty.buffer.Unpooled.EMPTY_BUFFER); - }*/ + } } private boolean handleCompression(ChannelHandlerContext ctx, ByteBuf buffer) { 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 84a60b157..7acfeea64 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 @@ -754,7 +754,6 @@ public class PacketConsumers { IntList intList = FastNMS.INSTANCE.field$ClientboundRemoveEntitiesPacket$entityIds(packet); for (int i = 0, size = intList.size(); i < size; i++) { List entities = user.furnitureView().remove(intList.getInt(i)); - System.out.println("Removing " + entities); if (entities == null) continue; for (int entityId : entities) { intList.add(entityId); @@ -1086,6 +1085,7 @@ public class PacketConsumers { // CraftEngine.instance().logger().warn("Failed to handle ClientboundSetEntityDataPacket", e); // } // }; + // 之前的旧东西经供参考需要改成使用bytebuffer的 // public static final TriConsumer SET_ENTITY_DATA = (user, event, packet) -> { // try { From 3a8d1abbe8458f5262a2bd794ece6118a87f51f7 Mon Sep 17 00:00:00 2001 From: jhqwqmc <2110242767@qq.com> Date: Mon, 7 Apr 2025 22:22:09 +0800 Subject: [PATCH 6/8] =?UTF-8?q?refactor(network):=20=E5=9B=9E=E9=80=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../plugin/network/BukkitNetworkManager.java | 2 +- .../bukkit/plugin/network/PacketConsumers.java | 14 +++++++++++++- 2 files changed, 14 insertions(+), 2 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 bcb2ff7c4..f0fba5cb7 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 @@ -158,7 +158,7 @@ public class BukkitNetworkManager implements NetworkManager, Listener, PluginMes registerByteBufPacketConsumer(PacketConsumers.LEVEL_EVENT, this.packetIds.clientboundLevelEventPacket()); registerByteBufPacketConsumer(PacketConsumers.OPEN_SCREEN, this.packetIds.clientboundOpenScreenPacket()); // registerByteBufPacketConsumer(PacketConsumers.REMOVE_ENTITY, this.packetIds.clientboundRemoveEntitiesPacket()); - registerByteBufPacketConsumer(PacketConsumers.ADD_ENTITY_BYTEBUFFER, this.packetIds.clientboundAddEntityPacket()); + // registerByteBufPacketConsumer(PacketConsumers.ADD_ENTITY_BYTEBUFFER, this.packetIds.clientboundAddEntityPacket()); // registerByteBufPacketConsumer(PacketConsumers.SOUND, this.packetIds.clientboundSoundPacket()); // registerByteBufPacketConsumer(PacketConsumers.SET_ENTITY_DATA, this.packetIds.clientboundSetEntityDataPacket()); } 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 7acfeea64..aaec44bfb 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 @@ -701,7 +701,15 @@ public class PacketConsumers { public static final TriConsumer ADD_ENTITY = (user, event, packet) -> { try { Object entityType = FastNMS.INSTANCE.field$ClientboundAddEntityPacket$type(packet); - if (entityType == Reflections.instance$EntityType$ITEM_DISPLAY) { + // Falling blocks + if (entityType == Reflections.instance$EntityType$FALLING_BLOCK) { + // TODO USE bytebuffer + int data = FastNMS.INSTANCE.field$ClientboundAddEntityPacket$data(packet); + int remapped = remap(data); + if (remapped != data) { + Reflections.field$ClientboundAddEntityPacket$data.set(packet, remapped); + } + } else if (entityType == Reflections.instance$EntityType$ITEM_DISPLAY) { // Furniture int entityId = FastNMS.INSTANCE.field$ClientboundAddEntityPacket$entityId(packet); LoadedFurniture furniture = BukkitFurnitureManager.instance().loadedFurnitureByRealEntityId(entityId); @@ -719,6 +727,10 @@ public class PacketConsumers { if (furniture != null) { event.setCancelled(true); } + } else if (entityType == Reflections.instance$EntityType$BLOCK_DISPLAY) { + // TODO USE bytebuffer + int entityId = FastNMS.INSTANCE.field$ClientboundAddEntityPacket$entityId(packet); + user.entityView().put(entityId, entityType); } } catch (Exception e) { CraftEngine.instance().logger().warn("Failed to handle ClientboundAddEntityPacket", e); From 0a89eed2e5a5e93341b7a2e6506382db47f8e417 Mon Sep 17 00:00:00 2001 From: jhqwqmc <2110242767@qq.com> Date: Mon, 7 Apr 2025 22:22:34 +0800 Subject: [PATCH 7/8] =?UTF-8?q?refactor(network):=20=E5=9B=9E=E9=80=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../craftengine/bukkit/plugin/network/PacketConsumers.java | 1 + 1 file changed, 1 insertion(+) 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 aaec44bfb..d5a417747 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 @@ -653,6 +653,7 @@ public class PacketConsumers { Reflections.field$ServerPlayer$connection.get(FastNMS.INSTANCE.method$CraftPlayer$getHandle(player)), FastNMS.INSTANCE.method$CraftItemStack$asNMSCopy(itemStack)); } + // TODO 需要修复 public static final BiConsumer ADD_ENTITY_BYTEBUFFER = (user, event) -> { try { FriendlyByteBuf buf = event.getBuffer(); From d6274fa0a2818b305db853d22d282bfbae8eab98 Mon Sep 17 00:00:00 2001 From: jhqwqmc <2110242767@qq.com> Date: Mon, 7 Apr 2025 22:35:52 +0800 Subject: [PATCH 8/8] =?UTF-8?q?refactor(network):=20=E5=9B=9E=E9=80=80?= =?UTF-8?q?=E5=9B=9E=E9=80=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../plugin/network/BukkitNetworkManager.java | 2 +- .../bukkit/plugin/network/PacketConsumers.java | 15 +-------------- 2 files changed, 2 insertions(+), 15 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 f0fba5cb7..bcb2ff7c4 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 @@ -158,7 +158,7 @@ public class BukkitNetworkManager implements NetworkManager, Listener, PluginMes registerByteBufPacketConsumer(PacketConsumers.LEVEL_EVENT, this.packetIds.clientboundLevelEventPacket()); registerByteBufPacketConsumer(PacketConsumers.OPEN_SCREEN, this.packetIds.clientboundOpenScreenPacket()); // registerByteBufPacketConsumer(PacketConsumers.REMOVE_ENTITY, this.packetIds.clientboundRemoveEntitiesPacket()); - // registerByteBufPacketConsumer(PacketConsumers.ADD_ENTITY_BYTEBUFFER, this.packetIds.clientboundAddEntityPacket()); + registerByteBufPacketConsumer(PacketConsumers.ADD_ENTITY_BYTEBUFFER, this.packetIds.clientboundAddEntityPacket()); // registerByteBufPacketConsumer(PacketConsumers.SOUND, this.packetIds.clientboundSoundPacket()); // registerByteBufPacketConsumer(PacketConsumers.SET_ENTITY_DATA, this.packetIds.clientboundSetEntityDataPacket()); } 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 d5a417747..7acfeea64 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 @@ -653,7 +653,6 @@ public class PacketConsumers { Reflections.field$ServerPlayer$connection.get(FastNMS.INSTANCE.method$CraftPlayer$getHandle(player)), FastNMS.INSTANCE.method$CraftItemStack$asNMSCopy(itemStack)); } - // TODO 需要修复 public static final BiConsumer ADD_ENTITY_BYTEBUFFER = (user, event) -> { try { FriendlyByteBuf buf = event.getBuffer(); @@ -702,15 +701,7 @@ public class PacketConsumers { public static final TriConsumer ADD_ENTITY = (user, event, packet) -> { try { Object entityType = FastNMS.INSTANCE.field$ClientboundAddEntityPacket$type(packet); - // Falling blocks - if (entityType == Reflections.instance$EntityType$FALLING_BLOCK) { - // TODO USE bytebuffer - int data = FastNMS.INSTANCE.field$ClientboundAddEntityPacket$data(packet); - int remapped = remap(data); - if (remapped != data) { - Reflections.field$ClientboundAddEntityPacket$data.set(packet, remapped); - } - } else if (entityType == Reflections.instance$EntityType$ITEM_DISPLAY) { + if (entityType == Reflections.instance$EntityType$ITEM_DISPLAY) { // Furniture int entityId = FastNMS.INSTANCE.field$ClientboundAddEntityPacket$entityId(packet); LoadedFurniture furniture = BukkitFurnitureManager.instance().loadedFurnitureByRealEntityId(entityId); @@ -728,10 +719,6 @@ public class PacketConsumers { if (furniture != null) { event.setCancelled(true); } - } else if (entityType == Reflections.instance$EntityType$BLOCK_DISPLAY) { - // TODO USE bytebuffer - int entityId = FastNMS.INSTANCE.field$ClientboundAddEntityPacket$entityId(packet); - user.entityView().put(entityId, entityType); } } catch (Exception e) { CraftEngine.instance().logger().warn("Failed to handle ClientboundAddEntityPacket", e);