From a2cf22892c06b84e935e423f9ffab12c88674d6c Mon Sep 17 00:00:00 2001 From: chickeneer Date: Sat, 12 Apr 2025 09:25:20 -0500 Subject: [PATCH] Improve MethodHandle API PR for ACFBukkitLocalesListener --- .../commands/ACFBukkitLocalesListener.java | 23 ++++++++----------- 1 file changed, 9 insertions(+), 14 deletions(-) diff --git a/bukkit/src/main/java/co/aikar/commands/ACFBukkitLocalesListener.java b/bukkit/src/main/java/co/aikar/commands/ACFBukkitLocalesListener.java index 405a7d5f..9dd3bc7d 100644 --- a/bukkit/src/main/java/co/aikar/commands/ACFBukkitLocalesListener.java +++ b/bukkit/src/main/java/co/aikar/commands/ACFBukkitLocalesListener.java @@ -31,14 +31,13 @@ import org.bukkit.event.player.PlayerLocaleChangeEvent; import java.lang.invoke.MethodHandle; import java.lang.invoke.MethodHandles; import java.lang.invoke.MethodType; -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; import java.util.Locale; class ACFBukkitLocalesListener implements Listener { private final BukkitCommandManager manager; private MethodHandle localeMethod1_8 = null; + private boolean checkedLocaleMethod1_8 = false; ACFBukkitLocalesListener(BukkitCommandManager manager) { this.manager = manager; @@ -60,24 +59,20 @@ class ACFBukkitLocalesListener implements Listener { } } catch (NoSuchMethodError ignored2) { try { + if (!checkedLocaleMethod1_8) { + checkedLocaleMethod1_8 = true; + MethodHandles.Lookup lookup = MethodHandles.lookup(); + MethodType type = MethodType.methodType(String.class); + localeMethod1_8 = lookup.findVirtual(PlayerLocaleChangeEvent.class, "getNewLocale", type); + } if (localeMethod1_8 != null) { String value = (String) localeMethod1_8.invoke(event); if (!value.equals(manager.issuersLocaleString.get(player.getUniqueId()))) { locale = ACFBukkitUtil.stringToLocale(value); } - - return; } - - MethodHandles.Lookup lookup = MethodHandles.lookup(); - MethodType type = MethodType.methodType(String.class); - - localeMethod1_8 = lookup.findVirtual(PlayerLocaleChangeEvent.class, "getNewLocale", type); - String value = (String) localeMethod1_8.invoke(event); - if (!value.equals(manager.issuersLocaleString.get(player.getUniqueId()))) { - locale = ACFBukkitUtil.stringToLocale(value); - } - } catch (Throwable ignored3) { + } catch (Throwable t) { + manager.log(LogLevel.ERROR, "Error registering MethodHandle for LocaleChangeEvent", t); } } }