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] =?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