From d90069685dc430bd04eef876956b4d638abf7e25 Mon Sep 17 00:00:00 2001 From: Mario Date: Mon, 1 Sep 2025 18:01:23 +0200 Subject: [PATCH 1/2] chore: support locale retrieval on legacy versions --- .../platform/bukkit/BukkitFacet.java | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/platform-bukkit/src/main/java/net/kyori/adventure/platform/bukkit/BukkitFacet.java b/platform-bukkit/src/main/java/net/kyori/adventure/platform/bukkit/BukkitFacet.java index 4c3e9e85..36f6cb88 100644 --- a/platform-bukkit/src/main/java/net/kyori/adventure/platform/bukkit/BukkitFacet.java +++ b/platform-bukkit/src/main/java/net/kyori/adventure/platform/bukkit/BukkitFacet.java @@ -421,11 +421,23 @@ public void contributePointers(final ConsoleCommandSender viewer, final net.kyor static final class PlayerPointers extends BukkitFacet implements Facet.Pointers { private static final MethodHandle LOCALE_SUPPORTED; + private static final boolean LEGACY; static { + boolean legacy = false; + MethodHandle handle = null; final MethodHandle asLocale = findMethod(Player.class, "getLocale", Locale.class); - final MethodHandle asString = findMethod(Player.class, "getLocale", String.class); - LOCALE_SUPPORTED = asLocale != null ? asLocale : asString; + + if (asLocale == null) { + handle = findMethod(Player.class, "getLocale", String.class); + if (handle == null) { + handle = findMethod(Player.Spigot.class, "getLocale", String.class); + legacy = true; + } + } + + LEGACY = legacy; + LOCALE_SUPPORTED = handle; } PlayerPointers() { @@ -439,7 +451,8 @@ public void contributePointers(final Player viewer, final net.kyori.adventure.po builder.withDynamic(Identity.LOCALE, () -> { if (LOCALE_SUPPORTED != null) { try { - final Object result = LOCALE_SUPPORTED.invoke(viewer); + final Object target = LEGACY ? viewer.spigot() : viewer; + final Object result = LOCALE_SUPPORTED.invoke(target); return result instanceof Locale ? (Locale) result : Translator.parseLocale((String) result); } catch (final Throwable error) { logError(error, "Failed to call getLocale() for %s", viewer); From 0cf25c93e32dd09d55939c65422078ed52b23c89 Mon Sep 17 00:00:00 2001 From: Mario Date: Mon, 1 Sep 2025 18:15:56 +0200 Subject: [PATCH 2/2] fix: ignored handle method --- .../net/kyori/adventure/platform/bukkit/BukkitFacet.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/platform-bukkit/src/main/java/net/kyori/adventure/platform/bukkit/BukkitFacet.java b/platform-bukkit/src/main/java/net/kyori/adventure/platform/bukkit/BukkitFacet.java index 36f6cb88..75946cff 100644 --- a/platform-bukkit/src/main/java/net/kyori/adventure/platform/bukkit/BukkitFacet.java +++ b/platform-bukkit/src/main/java/net/kyori/adventure/platform/bukkit/BukkitFacet.java @@ -425,10 +425,9 @@ static final class PlayerPointers extends BukkitFacet implements Facet.P static { boolean legacy = false; - MethodHandle handle = null; - final MethodHandle asLocale = findMethod(Player.class, "getLocale", Locale.class); + MethodHandle handle = findMethod(Player.class, "getLocale", Locale.class); - if (asLocale == null) { + if (handle == null) { handle = findMethod(Player.class, "getLocale", String.class); if (handle == null) { handle = findMethod(Player.Spigot.class, "getLocale", String.class);