From 14d958eee91b55d7834a5ca9e738d34a2f11feba Mon Sep 17 00:00:00 2001 From: jhqwqmc <2110242767@qq.com> Date: Sat, 5 Apr 2025 01:21:18 +0800 Subject: [PATCH] =?UTF-8?q?refactor(network):=20=E4=BD=BF=E7=94=A81.21+?= =?UTF-8?q?=E7=9A=84=E5=86=85=E7=BD=AE=E6=96=B9=E6=B3=95=E8=87=AA=E5=8A=A8?= =?UTF-8?q?=E8=8E=B7=E5=8F=96=E5=8C=85id?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../plugin/network/BukkitNetworkManager.java | 6 ++-- ...acketIds1_21_5.java => PacketIds1_21.java} | 12 +++---- .../plugin/network/impl/PacketIds1_21_2.java | 1 + .../plugin/network/impl/PacketIdsFind.java | 33 +++++++++++++++++++ .../craftengine/bukkit/util/Reflections.java | 17 ++++++++++ 5 files changed, 59 insertions(+), 10 deletions(-) rename bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/impl/{PacketIds1_21_5.java => PacketIds1_21.java} (52%) create mode 100644 bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/impl/PacketIdsFind.java 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 db3caf172..e12f30a0a 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 @@ -116,10 +116,8 @@ public class BukkitNetworkManager implements NetworkManager, Listener, PluginMes } private PacketIds setupPacketIds() { - if (VersionHelper.isVersionNewerThan1_21_5()) { - return new PacketIds1_21_5(); - } else if (VersionHelper.isVersionNewerThan1_21_2()) { - return new PacketIds1_21_2(); + if (VersionHelper.isVersionNewerThan1_21()) { + return new PacketIds1_21(); } else if (VersionHelper.isVersionNewerThan1_20_5()) { return new PacketIds1_20_5(); } else if (VersionHelper.isVersionNewerThan1_20_3()) { diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/impl/PacketIds1_21_5.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/impl/PacketIds1_21.java similarity index 52% rename from bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/impl/PacketIds1_21_5.java rename to bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/impl/PacketIds1_21.java index f54faf5cb..ad45cec30 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/impl/PacketIds1_21_5.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/impl/PacketIds1_21.java @@ -2,30 +2,30 @@ package net.momirealms.craftengine.bukkit.plugin.network.impl; import net.momirealms.craftengine.bukkit.plugin.network.PacketIds; -public class PacketIds1_21_5 implements PacketIds { +public class PacketIds1_21 implements PacketIds { @Override public int clientboundBlockUpdatePacket() { - return 8; + return PacketIdsFind.getClientboundPackets("minecraft:block_update"); } @Override public int clientboundSectionBlocksUpdatePacket() { - return 72; + return PacketIdsFind.getClientboundPackets("minecraft:section_blocks_update"); } @Override public int clientboundLevelParticlesPacket() { - return 40; + return PacketIdsFind.getClientboundPackets("minecraft:level_particles"); } @Override public int clientboundLevelEventPacket() { - return 39; + return PacketIdsFind.getClientboundPackets("minecraft:level_event"); } @Override public int clientboundAddEntityPacket() { - return 1; + return PacketIdsFind.getClientboundPackets("minecraft:add_entity"); } } diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/impl/PacketIds1_21_2.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/impl/PacketIds1_21_2.java index 0d387b007..8e86b6914 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/impl/PacketIds1_21_2.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/impl/PacketIds1_21_2.java @@ -2,6 +2,7 @@ package net.momirealms.craftengine.bukkit.plugin.network.impl; import net.momirealms.craftengine.bukkit.plugin.network.PacketIds; +@Deprecated public class PacketIds1_21_2 implements PacketIds { @Override diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/impl/PacketIdsFind.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/impl/PacketIdsFind.java new file mode 100644 index 000000000..fbd54f56f --- /dev/null +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/impl/PacketIdsFind.java @@ -0,0 +1,33 @@ +package net.momirealms.craftengine.bukkit.plugin.network.impl; + +import com.google.gson.JsonElement; +import net.momirealms.craftengine.bukkit.util.Reflections; +import net.momirealms.craftengine.core.plugin.CraftEngine; + +import java.util.HashMap; +import java.util.Map; + +public class PacketIdsFind { + private static final Map> gamePacketIds = new HashMap<>(); + + static { + try { + Object packetReport = Reflections.constructor$PacketReport.newInstance((Object) null); + JsonElement jsonElement = (JsonElement) Reflections.method$PacketReport$serializePackets.invoke(packetReport); + var play = jsonElement.getAsJsonObject().get("play"); + for (var entry : play.getAsJsonObject().entrySet()) { + Map ids = new HashMap<>(); + gamePacketIds.put(entry.getKey(), ids); + for (var entry2 : entry.getValue().getAsJsonObject().entrySet()) { + ids.put(entry2.getKey(), entry2.getValue().getAsJsonObject().get("protocol_id").getAsInt()); + } + } + } catch (Exception e) { + CraftEngine.instance().logger().warn("Failed to get packets", e); + } + } + + public static int getClientboundPackets(String packetName) { + return gamePacketIds.get("clientbound").get(packetName); + } +} 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 04f752199..ae1dc204a 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 @@ -1,6 +1,7 @@ package net.momirealms.craftengine.bukkit.util; import com.google.common.collect.ImmutableList; +import com.google.gson.JsonElement; import io.netty.buffer.ByteBuf; import io.netty.channel.Channel; import io.netty.channel.ChannelFuture; @@ -6123,4 +6124,20 @@ public class Reflections { clazz$EntityLookup, clazz$Entity, int.class ) ); + + // 1.21+ + public static final Class clazz$PacketReport = + ReflectionUtils.getClazz( + BukkitReflectionUtils.assembleMCClass("data.info.PacketReport") + ); + + // 1.21+ + public static final Constructor constructor$PacketReport = Optional.ofNullable(clazz$PacketReport) + .map(it -> ReflectionUtils.getConstructor(it, 0)) + .orElse(null); + + // 1.21+ + public static final Method method$PacketReport$serializePackets = Optional.ofNullable(clazz$PacketReport) + .map(it -> ReflectionUtils.getDeclaredMethod(it, JsonElement.class)) + .orElse(null); }