From 7950ad69b7ec508c2cc6b519b51600b1aef827c5 Mon Sep 17 00:00:00 2001 From: twisti <76837088+twisti-dev@users.noreply.github.com> Date: Tue, 31 Mar 2026 15:02:57 +0200 Subject: [PATCH] feat: update version to 1.21.11-2.73.1 and enhance hidden class instantiation --- gradle.properties | 2 +- .../surfapi/core/api/invoker/HiddenInvokerUtil.java | 13 ++++++++----- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/gradle.properties b/gradle.properties index b3300cc04..608bc8ead 100644 --- a/gradle.properties +++ b/gradle.properties @@ -7,6 +7,6 @@ org.jetbrains.dokka.experimental.gradle.pluginMode=V2Enabled javaVersion=25 mcVersion=1.21.11 group=dev.slne.surf -version=1.21.11-2.73.0 +version=1.21.11-2.73.1 relocationPrefix=dev.slne.surf.surfapi.libs snapshot=false diff --git a/surf-api-core/surf-api-core-api/src/main/java/dev/slne/surf/surfapi/core/api/invoker/HiddenInvokerUtil.java b/surf-api-core/surf-api-core-api/src/main/java/dev/slne/surf/surfapi/core/api/invoker/HiddenInvokerUtil.java index e4a30b37a..be83c1844 100644 --- a/surf-api-core/surf-api-core-api/src/main/java/dev/slne/surf/surfapi/core/api/invoker/HiddenInvokerUtil.java +++ b/surf-api-core/surf-api-core-api/src/main/java/dev/slne/surf/surfapi/core/api/invoker/HiddenInvokerUtil.java @@ -134,10 +134,13 @@ static I createInvoker( final List classData = List.of(target, payloadClass, method, privateLookupIn, isSuspend); final MethodHandles.Lookup hiddenClassLookup = lookup.defineHiddenClassWithClassData(templateBytes, classData, true); - return hiddenClassLookup.lookupClass() - .asSubclass(invokerInterface) - .getDeclaredConstructor() - .newInstance(); + final MethodHandle constructor = hiddenClassLookup.findConstructor(hiddenClassLookup.lookupClass(), MethodType.methodType(void.class)); + + try { + return invokerInterface.cast(constructor.invoke()); + } catch (Throwable e) { + throw new ReflectiveOperationException("Failed to instantiate hidden class", e); + } } /** @@ -192,7 +195,7 @@ public static InvokerClassData loadClassData( * the hidden class. * @param methodType the expected {@link MethodType} for non-suspend handler methods. * @return an {@link InvokerClassData} instance containing the resolved handler method - * information, along with metadata on whether it's a suspend function. + * information, along with metadata on whether it's a suspend function. * @throws ReflectiveOperationException if class data extraction or handle resolution fails. */ public static InvokerClassData loadClassDataWithAutoSuspend(