mirror of
https://github.com/aikar/commands.git
synced 2026-05-31 06:11:55 +00:00
Improve cached bukkit locale lookup - #GH-342
This commit is contained in:
@@ -31,6 +31,8 @@ import org.bukkit.event.player.PlayerQuitEvent;
|
||||
import org.bukkit.event.server.PluginDisableEvent;
|
||||
import org.bukkit.plugin.Plugin;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
class ACFBukkitListener implements Listener {
|
||||
private BukkitCommandManager manager;
|
||||
private final Plugin plugin;
|
||||
@@ -47,10 +49,11 @@ class ACFBukkitListener implements Listener {
|
||||
}
|
||||
manager.unregisterCommands();
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onPlayerJoin(PlayerJoinEvent event) {
|
||||
Player player = event.getPlayer();
|
||||
if(this.manager.autoDetectFromClient) {
|
||||
if (this.manager.autoDetectFromClient) {
|
||||
this.manager.readPlayerLocale(player);
|
||||
this.plugin.getServer().getScheduler().runTaskLater(this.plugin, () -> manager.readPlayerLocale(player), 20);
|
||||
} else {
|
||||
@@ -62,6 +65,8 @@ class ACFBukkitListener implements Listener {
|
||||
@EventHandler
|
||||
public void onPlayerQuit(PlayerQuitEvent quitEvent) {
|
||||
//cleanup
|
||||
manager.issuersLocale.remove(quitEvent.getPlayer().getUniqueId());
|
||||
UUID playerUniqueId = quitEvent.getPlayer().getUniqueId();
|
||||
manager.issuersLocale.remove(playerUniqueId);
|
||||
manager.issuersLocaleString.remove(playerUniqueId);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -57,6 +57,8 @@ import java.util.List;
|
||||
import java.util.Locale;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
import java.util.UUID;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
import java.util.regex.Matcher;
|
||||
@@ -86,6 +88,7 @@ public class BukkitCommandManager extends CommandManager<
|
||||
protected BukkitCommandCompletions completions;
|
||||
MCTiming commandTiming;
|
||||
protected BukkitLocales locales;
|
||||
protected Map<UUID, String> issuersLocaleString = new ConcurrentHashMap<>();
|
||||
private boolean cantReadLocale = false;
|
||||
protected boolean autoDetectFromClient = true;
|
||||
|
||||
@@ -315,11 +318,15 @@ public class BukkitCommandManager extends CommandManager<
|
||||
localeField.setAccessible(true);
|
||||
Object localeString = localeField.get(nmsPlayer);
|
||||
if (localeString instanceof String) {
|
||||
String[] split = ACFPatterns.UNDERSCORE.split((String) localeString);
|
||||
Locale locale = split.length > 1 ? new Locale(split[0], split[1]) : new Locale(split[0]);
|
||||
Locale prev = issuersLocale.put(player.getUniqueId(), locale);
|
||||
if (!Objects.equals(locale, prev)) {
|
||||
this.notifyLocaleChange(getCommandIssuer(player), prev, locale);
|
||||
UUID playerUniqueId = player.getUniqueId();
|
||||
if (!localeString.equals(issuersLocaleString.get(playerUniqueId))) {
|
||||
String[] split = ACFPatterns.UNDERSCORE.split((String) localeString);
|
||||
Locale locale = split.length > 1 ? new Locale(split[0], split[1]) : new Locale(split[0]);
|
||||
Locale prev = issuersLocale.put(playerUniqueId, locale);
|
||||
issuersLocaleString.put(playerUniqueId, (String) localeString);
|
||||
if (!Objects.equals(locale, prev)) {
|
||||
this.notifyLocaleChange(getCommandIssuer(player), prev, locale);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user