From 9cda66d67582afd8c4f1725b263f4a06edcf5c77 Mon Sep 17 00:00:00 2001 From: jhqwqmc <2110242767@qq.com> Date: Tue, 8 Jul 2025 16:54:36 +0800 Subject: [PATCH 1/3] =?UTF-8?q?fix(auth):=20=E4=BF=AE=E5=A4=8D=E8=8E=B7?= =?UTF-8?q?=E5=8F=96=E4=B8=8D=E5=8F=AF=E4=BF=A1uuid?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- bukkit/build.gradle.kts | 2 ++ .../plugin/network/PacketConsumers.java | 6 ++++++ .../reflection/minecraft/CoreReflections.java | 21 +++++++++++++++++++ core/build.gradle.kts | 2 ++ gradle.properties | 1 + 5 files changed, 32 insertions(+) diff --git a/bukkit/build.gradle.kts b/bukkit/build.gradle.kts index 7426c520a..9da0bee94 100644 --- a/bukkit/build.gradle.kts +++ b/bukkit/build.gradle.kts @@ -58,6 +58,8 @@ dependencies { compileOnly("org.bstats:bstats-bukkit:${rootProject.properties["bstats_version"]}") // Aho-Corasick java implementation compileOnly("org.ahocorasick:ahocorasick:${rootProject.properties["ahocorasick_version"]}") + // authlib + compileOnly("com.mojang:authlib:${rootProject.properties["authlib_version"]}") } java { 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 fb09e542f..a395ea60b 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 @@ -1,6 +1,7 @@ package net.momirealms.craftengine.bukkit.plugin.network; import com.google.common.collect.Lists; +import com.mojang.authlib.GameProfile; import com.mojang.datafixers.util.Either; import io.netty.buffer.ByteBuf; import io.netty.buffer.Unpooled; @@ -2405,6 +2406,11 @@ public class PacketConsumers { CoreReflections.methodHandle$ServerCommonPacketListenerImpl$closedSetter.invokeExact(packetListener, false); } + // 重新获取已验证的uuid + GameProfile gameProfile = (GameProfile) CoreReflections.methodHandle$ServerConfigurationPacketListenerImpl$gameProfileGetter.invokeExact(packetListener); + user.setName(gameProfile.getName()); + user.setUUID(gameProfile.getId()); + ResourcePackHost host = CraftEngine.instance().packManager().resourcePackHost(); host.requestResourcePackDownloadLink(user.uuid()).thenAccept(dataList -> { if (dataList.isEmpty()) { diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/reflection/minecraft/CoreReflections.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/reflection/minecraft/CoreReflections.java index dfbf5ac18..8fd9a076e 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/reflection/minecraft/CoreReflections.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/reflection/minecraft/CoreReflections.java @@ -2,6 +2,7 @@ package net.momirealms.craftengine.bukkit.plugin.reflection.minecraft; import com.google.common.collect.ImmutableList; import com.google.gson.JsonElement; +import com.mojang.authlib.GameProfile; import com.mojang.serialization.Codec; import com.mojang.serialization.DynamicOps; import io.netty.buffer.ByteBuf; @@ -3764,4 +3765,24 @@ public final class CoreReflections { clazz$Level, clazz$BlockPos, clazz$BlockState, clazz$Player ) ); + + public static final Field field$ServerConfigurationPacketListenerImpl$gameProfile = Optional.ofNullable(clazz$ServerConfigurationPacketListenerImpl) + .map(it -> ReflectionUtils.getDeclaredField(it, GameProfile.class, 0)) + .orElse(null); + + public static final MethodHandle methodHandle$ServerConfigurationPacketListenerImpl$gameProfileGetter; + + static { + try { + if (VersionHelper.isOrAbove1_20_2()) { + methodHandle$ServerConfigurationPacketListenerImpl$gameProfileGetter = + ReflectionUtils.unreflectGetter(field$ServerConfigurationPacketListenerImpl$gameProfile) + .asType(MethodType.methodType(GameProfile.class, Object.class)); + } else { + methodHandle$ServerConfigurationPacketListenerImpl$gameProfileGetter = null; + } + } catch (ReflectiveOperationException e) { + throw new ReflectionInitException("Failed to initialize reflection", e); + } + } } diff --git a/core/build.gradle.kts b/core/build.gradle.kts index ca1fa6d89..c8ed0b117 100644 --- a/core/build.gradle.kts +++ b/core/build.gradle.kts @@ -63,6 +63,8 @@ dependencies { compileOnly("com.google.jimfs:jimfs:${rootProject.properties["jimfs_version"]}") // Brigadier compileOnly("com.mojang:brigadier:${rootProject.properties["mojang_brigadier_version"]}") + // authlib + compileOnly("com.mojang:authlib:${rootProject.properties["authlib_version"]}") } java { diff --git a/gradle.properties b/gradle.properties index d71f01899..1ce4ffbe9 100644 --- a/gradle.properties +++ b/gradle.properties @@ -56,6 +56,7 @@ reactive_streams_version=1.0.4 amazon_awssdk_version=2.31.23 amazon_awssdk_eventstream_version=1.0.1 jimfs_version=1.3.0 +authlib_version=6.0.58 # Proxy settings #systemProp.socks.proxyHost=127.0.0.1 From cc640883b02b4c9c7e9b7cc7da90836a25ecaca4 Mon Sep 17 00:00:00 2001 From: jhqwqmc <2110242767@qq.com> Date: Tue, 8 Jul 2025 17:44:34 +0800 Subject: [PATCH 2/3] =?UTF-8?q?fix(auth):=20=E4=BF=AE=E5=A4=8D=E8=8E=B7?= =?UTF-8?q?=E5=8F=96=E4=B8=8D=E5=8F=AF=E4=BF=A1uuid?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../plugin/network/BukkitNetworkManager.java | 1 + .../plugin/network/PacketConsumers.java | 16 +++++++++----- .../reflection/minecraft/CoreReflections.java | 21 ------------------- .../minecraft/NetworkReflections.java | 7 +++++++ gradle.properties | 2 +- 5 files changed, 20 insertions(+), 27 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 4701fca90..6b58133c5 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 @@ -156,6 +156,7 @@ public class BukkitNetworkManager implements NetworkManager, Listener, PluginMes registerNMSPacketConsumer(PacketConsumers.ROTATE_HEAD, NetworkReflections.clazz$ClientboundRotateHeadPacket); registerNMSPacketConsumer(PacketConsumers.SET_ENTITY_MOTION, NetworkReflections.clazz$ClientboundSetEntityMotionPacket); registerNMSPacketConsumer(PacketConsumers.FINISH_CONFIGURATION, NetworkReflections.clazz$ClientboundFinishConfigurationPacket); + registerNMSPacketConsumer(PacketConsumers.LOGIN_FINISHED, NetworkReflections.clazz$ClientboundLoginFinishedPacket); registerS2CByteBufPacketConsumer(PacketConsumers.LEVEL_CHUNK_WITH_LIGHT, this.packetIds.clientboundLevelChunkWithLightPacket()); registerS2CByteBufPacketConsumer(PacketConsumers.SECTION_BLOCK_UPDATE, this.packetIds.clientboundSectionBlocksUpdatePacket()); registerS2CByteBufPacketConsumer(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 a395ea60b..99b089809 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 @@ -2406,11 +2406,6 @@ public class PacketConsumers { CoreReflections.methodHandle$ServerCommonPacketListenerImpl$closedSetter.invokeExact(packetListener, false); } - // 重新获取已验证的uuid - GameProfile gameProfile = (GameProfile) CoreReflections.methodHandle$ServerConfigurationPacketListenerImpl$gameProfileGetter.invokeExact(packetListener); - user.setName(gameProfile.getName()); - user.setUUID(gameProfile.getId()); - ResourcePackHost host = CraftEngine.instance().packManager().resourcePackHost(); host.requestResourcePackDownloadLink(user.uuid()).thenAccept(dataList -> { if (dataList.isEmpty()) { @@ -2438,4 +2433,15 @@ public class PacketConsumers { CraftEngine.instance().logger().warn("Failed to handle ClientboundFinishConfigurationPacket", e); } }; + + public static final TriConsumer LOGIN_FINISHED = (user, event, packet) -> { + try { + GameProfile gameProfile = FastNMS.INSTANCE.field$ClientboundLoginFinishedPacket$gameProfile(packet); + user.setName(gameProfile.getName()); + user.setUUID(gameProfile.getId()); + System.out.println("Login finished: " + user.name() + " " + user.uuid()); + } catch (Exception e) { + CraftEngine.instance().logger().warn("Failed to handle ClientboundLoginFinishedPacket", e); + } + }; } diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/reflection/minecraft/CoreReflections.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/reflection/minecraft/CoreReflections.java index 8fd9a076e..dfbf5ac18 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/reflection/minecraft/CoreReflections.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/reflection/minecraft/CoreReflections.java @@ -2,7 +2,6 @@ package net.momirealms.craftengine.bukkit.plugin.reflection.minecraft; import com.google.common.collect.ImmutableList; import com.google.gson.JsonElement; -import com.mojang.authlib.GameProfile; import com.mojang.serialization.Codec; import com.mojang.serialization.DynamicOps; import io.netty.buffer.ByteBuf; @@ -3765,24 +3764,4 @@ public final class CoreReflections { clazz$Level, clazz$BlockPos, clazz$BlockState, clazz$Player ) ); - - public static final Field field$ServerConfigurationPacketListenerImpl$gameProfile = Optional.ofNullable(clazz$ServerConfigurationPacketListenerImpl) - .map(it -> ReflectionUtils.getDeclaredField(it, GameProfile.class, 0)) - .orElse(null); - - public static final MethodHandle methodHandle$ServerConfigurationPacketListenerImpl$gameProfileGetter; - - static { - try { - if (VersionHelper.isOrAbove1_20_2()) { - methodHandle$ServerConfigurationPacketListenerImpl$gameProfileGetter = - ReflectionUtils.unreflectGetter(field$ServerConfigurationPacketListenerImpl$gameProfile) - .asType(MethodType.methodType(GameProfile.class, Object.class)); - } else { - methodHandle$ServerConfigurationPacketListenerImpl$gameProfileGetter = null; - } - } catch (ReflectiveOperationException e) { - throw new ReflectionInitException("Failed to initialize reflection", e); - } - } } diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/reflection/minecraft/NetworkReflections.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/reflection/minecraft/NetworkReflections.java index 3992dfba5..5ab685765 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/reflection/minecraft/NetworkReflections.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/reflection/minecraft/NetworkReflections.java @@ -1554,4 +1554,11 @@ public final class NetworkReflections { throw new ReflectionInitException("Failed to initialize ServerCommonPacketListener$handleResourcePackResponse", e); } } + + public static final Class clazz$ClientboundLoginFinishedPacket = requireNonNull( + BukkitReflectionUtils.findReobfOrMojmapClass( + "network.protocol.login.PacketLoginOutSuccess", + List.of("network.protocol.login.ClientboundLoginFinishedPacket", "network.protocol.login.ClientboundGameProfilePacket") + ) + ); } diff --git a/gradle.properties b/gradle.properties index 1ce4ffbe9..11a813c70 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.18 -nms_helper_version=1.0.29 +nms_helper_version=1.0.30 evalex_version=3.5.0 reactive_streams_version=1.0.4 amazon_awssdk_version=2.31.23 From 4a5501a1d4e83d5aff35bd162dba1692e0e3acf5 Mon Sep 17 00:00:00 2001 From: jhqwqmc <2110242767@qq.com> Date: Tue, 8 Jul 2025 17:45:34 +0800 Subject: [PATCH 3/3] =?UTF-8?q?refactor(bukkit):=20=E7=A7=BB=E9=99=A4=20Cl?= =?UTF-8?q?ientboundLoginFinishedPacket=20=E5=A4=84=E7=90=86=E4=B8=AD?= =?UTF-8?q?=E7=9A=84=E8=B0=83=E8=AF=95=E8=BE=93=E5=87=BA?= 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 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 99b089809..e1d18f86a 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 @@ -2439,7 +2439,6 @@ public class PacketConsumers { GameProfile gameProfile = FastNMS.INSTANCE.field$ClientboundLoginFinishedPacket$gameProfile(packet); user.setName(gameProfile.getName()); user.setUUID(gameProfile.getId()); - System.out.println("Login finished: " + user.name() + " " + user.uuid()); } catch (Exception e) { CraftEngine.instance().logger().warn("Failed to handle ClientboundLoginFinishedPacket", e); }