From c3e6a1b3329a768ec51b0d3878ebd9285be52ab6 Mon Sep 17 00:00:00 2001 From: XiaoMoMi Date: Sun, 6 Apr 2025 13:39:16 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9packet=20id?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../plugin/network/BukkitNetworkManager.java | 2 +- .../plugin/network/PacketConsumers.java | 70 ++++++++++--------- .../plugin/network/impl/PacketIds1_20_2.java | 3 +- .../plugin/network/impl/PacketIds1_20_3.java | 3 +- .../plugin/network/impl/PacketIds1_20_5.java | 3 +- .../bukkit/world/BukkitWorldManager.java | 16 +++-- 6 files changed, 52 insertions(+), 45 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 44bc64611..b1c8bc67f 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 @@ -149,7 +149,7 @@ public class BukkitNetworkManager implements NetworkManager, Listener, PluginMes registerNMSPacketConsumer(PacketConsumers.SIGN_UPDATE, Reflections.clazz$ServerboundSignUpdatePacket); registerNMSPacketConsumer(PacketConsumers.EDIT_BOOK, Reflections.clazz$ServerboundEditBookPacket); registerNMSPacketConsumer(PacketConsumers.CUSTOM_PAYLOAD, Reflections.clazz$ServerboundCustomPayloadPacket); - registerNMSPacketConsumer(PacketConsumers.SET_ENTITY_DATA, Reflections.clazz$ClientboundSetEntityDataPacket); +// registerNMSPacketConsumer(PacketConsumers.SET_ENTITY_DATA, Reflections.clazz$ClientboundSetEntityDataPacket); // registerNMSPacketConsumer(PacketConsumers.OPEN_SCREEN, Reflections.clazz$ClientboundOpenScreenPacket); registerByteBufPacketConsumer(PacketConsumers.SECTION_BLOCK_UPDATE, this.packetIds.clientboundSectionBlocksUpdatePacket()); registerByteBufPacketConsumer(PacketConsumers.BLOCK_UPDATE, this.packetIds.clientboundBlockUpdatePacket()); 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 7c5b4c1b0..d43517621 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 @@ -83,6 +83,7 @@ public class PacketConsumers { return mappingsMOD[stateId]; } + // TODO Use bytebuffer? public static final TriConsumer LEVEL_CHUNK_WITH_LIGHT = (user, event, packet) -> { try { if (user.clientModEnabled()) { @@ -657,6 +658,7 @@ 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 TriConsumer ADD_ENTITY = (user, event, packet) -> { try { Object entityType = FastNMS.INSTANCE.field$ClientboundAddEntityPacket$type(packet); @@ -695,6 +697,7 @@ public class PacketConsumers { }; // 1.21.3+ + // TODO USE bytebuffer public static final TriConsumer SYNC_ENTITY_POSITION = (user, event, packet) -> { try { int entityId = (int) Reflections.field$ClientboundEntityPositionSyncPacket$id.get(packet); @@ -706,6 +709,7 @@ 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); @@ -717,6 +721,7 @@ public class PacketConsumers { } }; + // TODO USE bytebuffer public static final TriConsumer REMOVE_ENTITY = (user, event, packet) -> { try { IntList intList = FastNMS.INSTANCE.field$ClientboundRemoveEntitiesPacket$entityIds(packet); @@ -796,6 +801,7 @@ public class PacketConsumers { } }; + // TODO USE bytebuffer public static final TriConsumer SOUND = (user, event, packet) -> { try { Object soundEvent = FastNMS.INSTANCE.field$ClientboundSoundPacket$soundEvent(packet); @@ -1006,38 +1012,38 @@ public class PacketConsumers { } }; - 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; - } - } - // todo修改其他实体的物品的方块谓词 - } catch (Exception e) { - CraftEngine.instance().logger().warn("Failed to handle ClientboundSetEntityDataPacket", e); - } - }; + // 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); +// } +// }; // public static final TriConsumer OPEN_SCREEN = (user, event, packet) -> { // try { 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 fc85ed504..c4d740242 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 @@ -29,9 +29,8 @@ public class PacketIds1_20_2 implements PacketIds { return 1; } - //TODO TEST @Override public int clientboundOpenScreenPacket() { - return 48; + return 49; } } 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 6f43942e6..c18291673 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 @@ -29,9 +29,8 @@ public class PacketIds1_20_3 implements PacketIds { return 1; } - //TODO TEST @Override public int clientboundOpenScreenPacket() { - return 48; + return 49; } } 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 782e3fa37..70e909fd6 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 @@ -29,9 +29,8 @@ public class PacketIds1_20_5 implements PacketIds { return 1; } - //TODO TEST @Override public int clientboundOpenScreenPacket() { - return 48; + return 51; } } diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/world/BukkitWorldManager.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/world/BukkitWorldManager.java index 98bb2aec9..26e47a631 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/world/BukkitWorldManager.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/world/BukkitWorldManager.java @@ -7,6 +7,7 @@ import net.momirealms.craftengine.bukkit.plugin.injector.BukkitInjector; import net.momirealms.craftengine.bukkit.util.BlockStateUtils; import net.momirealms.craftengine.bukkit.util.Reflections; import net.momirealms.craftengine.core.block.ImmutableBlockState; +import net.momirealms.craftengine.core.plugin.CraftEngine; import net.momirealms.craftengine.core.plugin.config.Config; import net.momirealms.craftengine.core.plugin.scheduler.SchedulerTask; import net.momirealms.craftengine.core.util.VersionHelper; @@ -112,16 +113,19 @@ public class BukkitWorldManager implements WorldManager, Listener { world.tick(); } }, 1, 1); - // load loaded chunks this.worldMapLock.writeLock().lock(); try { for (World world : Bukkit.getWorlds()) { - CEWorld ceWorld = new BukkitCEWorld(new BukkitWorld(world), this.storageAdaptor); - this.worlds.put(world.getUID(), ceWorld); - this.resetWorldArray(); - for (Chunk chunk : world.getLoadedChunks()) { - handleChunkLoad(ceWorld, chunk); + try { + CEWorld ceWorld = new BukkitCEWorld(new BukkitWorld(world), this.storageAdaptor); + this.worlds.put(world.getUID(), ceWorld); + this.resetWorldArray(); + for (Chunk chunk : world.getLoadedChunks()) { + handleChunkLoad(ceWorld, chunk); + } + } catch (Exception e) { + CraftEngine.instance().logger().warn("Error loading world: " + world.getName(), e); } } } finally {