3131import java .lang .invoke .MethodHandle ;
3232import java .lang .invoke .MethodHandles ;
3333import java .lang .invoke .MethodType ;
34- import java .lang .reflect .InvocationTargetException ;
35- import java .lang .reflect .Method ;
3634import java .util .Locale ;
3735
3836class ACFBukkitLocalesListener implements Listener {
3937
4038 private final BukkitCommandManager manager ;
4139 private MethodHandle localeMethod1_8 = null ;
40+ private boolean checkedLocaleMethod1_8 = false ;
4241
4342 ACFBukkitLocalesListener (BukkitCommandManager manager ) {
4443 this .manager = manager ;
@@ -60,24 +59,20 @@ void onLocaleChange(PlayerLocaleChangeEvent event) {
6059 }
6160 } catch (NoSuchMethodError ignored2 ) {
6261 try {
62+ if (!checkedLocaleMethod1_8 ) {
63+ checkedLocaleMethod1_8 = true ;
64+ MethodHandles .Lookup lookup = MethodHandles .lookup ();
65+ MethodType type = MethodType .methodType (String .class );
66+ localeMethod1_8 = lookup .findVirtual (PlayerLocaleChangeEvent .class , "getNewLocale" , type );
67+ }
6368 if (localeMethod1_8 != null ) {
6469 String value = (String ) localeMethod1_8 .invoke (event );
6570 if (!value .equals (manager .issuersLocaleString .get (player .getUniqueId ()))) {
6671 locale = ACFBukkitUtil .stringToLocale (value );
6772 }
68-
69- return ;
70- }
71-
72- MethodHandles .Lookup lookup = MethodHandles .lookup ();
73- MethodType type = MethodType .methodType (String .class );
74-
75- localeMethod1_8 = lookup .findVirtual (PlayerLocaleChangeEvent .class , "getNewLocale" , type );
76- String value = (String ) localeMethod1_8 .invoke (event );
77- if (!value .equals (manager .issuersLocaleString .get (player .getUniqueId ()))) {
78- locale = ACFBukkitUtil .stringToLocale (value );
7973 }
80- } catch (Throwable ignored3 ) {
74+ } catch (Throwable t ) {
75+ manager .log (LogLevel .ERROR , "Error registering MethodHandle for LocaleChangeEvent" , t );
8176 }
8277 }
8378 }
0 commit comments