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..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 @@ -421,11 +421,22 @@ 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 { - final MethodHandle asLocale = findMethod(Player.class, "getLocale", Locale.class); - final MethodHandle asString = findMethod(Player.class, "getLocale", String.class); - LOCALE_SUPPORTED = asLocale != null ? asLocale : asString; + boolean legacy = false; + MethodHandle handle = findMethod(Player.class, "getLocale", Locale.class); + + if (handle == 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 +450,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);