mirror of
https://github.com/aikar/commands.git
synced 2026-06-20 14:00:37 +00:00
Add support for per issuer locale in Sponge and BungeeCord (#104)
* Add support for per issuer locale in Sponge and BungeeCord * Added Optional<UUID> getUniqueId to CommandIssuer * Added update task and delayed join listener in BungeeCord * Added settings change listener in Sponge * Moved setLocale method up to the CommandManager to remove the amount of duplicated code * Remove Optional usage * Remove player terminology in core
This commit is contained in:
@@ -0,0 +1,37 @@
|
||||
package co.aikar.commands;
|
||||
|
||||
import net.md_5.bungee.api.connection.ProxiedPlayer;
|
||||
import net.md_5.bungee.api.event.PlayerDisconnectEvent;
|
||||
import net.md_5.bungee.api.event.PostLoginEvent;
|
||||
import net.md_5.bungee.api.plugin.Listener;
|
||||
import net.md_5.bungee.api.plugin.Plugin;
|
||||
import net.md_5.bungee.event.EventHandler;
|
||||
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
public class ACFBungeeListener implements Listener {
|
||||
|
||||
private final BungeeCommandManager manager;
|
||||
private final Plugin plugin;
|
||||
|
||||
public ACFBungeeListener(BungeeCommandManager manager, Plugin plugin) {
|
||||
this.manager = manager;
|
||||
this.plugin = plugin;
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onPlayerJoin(PostLoginEvent loginEvent) {
|
||||
ProxiedPlayer player = loginEvent.getPlayer();
|
||||
|
||||
//the client settings are sent after a successful login
|
||||
Runnable task = () -> manager.readLocale(player);
|
||||
plugin.getProxy().getScheduler().schedule(plugin, task, 1, TimeUnit.SECONDS);
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onDisconnect(PlayerDisconnectEvent disconnectEvent) {
|
||||
//cleanup
|
||||
ProxiedPlayer player = disconnectEvent.getPlayer();
|
||||
manager.issuersLocale.remove(player.getUniqueId());
|
||||
}
|
||||
}
|
||||
@@ -25,8 +25,11 @@ package co.aikar.commands;
|
||||
|
||||
import net.md_5.bungee.api.CommandSender;
|
||||
import net.md_5.bungee.api.connection.ProxiedPlayer;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.util.Objects;
|
||||
import java.util.UUID;
|
||||
|
||||
public class BungeeCommandIssuer implements CommandIssuer {
|
||||
private final BungeeCommandManager manager;
|
||||
@@ -57,6 +60,16 @@ public class BungeeCommandIssuer implements CommandIssuer {
|
||||
return sender instanceof ProxiedPlayer;
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NotNull UUID getUniqueId() {
|
||||
if (isPlayer()) {
|
||||
return ((ProxiedPlayer) sender).getUniqueId();
|
||||
}
|
||||
|
||||
//generate a unique id based of the name (like for the console command sender)
|
||||
return UUID.nameUUIDFromBytes(sender.getName().getBytes(StandardCharsets.UTF_8));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void sendMessageInternal(String message) {
|
||||
sender.sendMessage(ACFBungeeUtil.color(message));
|
||||
|
||||
@@ -26,13 +26,17 @@ package co.aikar.commands;
|
||||
import co.aikar.commands.apachecommonslang.ApacheCommonsExceptionUtil;
|
||||
import net.md_5.bungee.api.ChatColor;
|
||||
import net.md_5.bungee.api.CommandSender;
|
||||
import net.md_5.bungee.api.ProxyServer;
|
||||
import net.md_5.bungee.api.connection.ProxiedPlayer;
|
||||
import net.md_5.bungee.api.plugin.Plugin;
|
||||
|
||||
import java.lang.reflect.Method;
|
||||
import java.lang.reflect.Parameter;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
@@ -57,8 +61,16 @@ public class BungeeCommandManager extends CommandManager<
|
||||
this.formatters.put(MessageType.SYNTAX, new BungeeMessageFormatter(ChatColor.YELLOW, ChatColor.GREEN, ChatColor.WHITE));
|
||||
this.formatters.put(MessageType.INFO, new BungeeMessageFormatter(ChatColor.BLUE, ChatColor.DARK_GREEN, ChatColor.GREEN));
|
||||
this.formatters.put(MessageType.HELP, new BungeeMessageFormatter(ChatColor.AQUA, ChatColor.GREEN, ChatColor.YELLOW));
|
||||
|
||||
getLocales(); // auto load locales
|
||||
|
||||
plugin.getProxy().getPluginManager().registerListener(plugin, new ACFBungeeListener(this, plugin));
|
||||
|
||||
//BungeeCord has no event for listening for client setting changes
|
||||
plugin.getProxy().getScheduler().schedule(plugin, () -> {
|
||||
ProxyServer.getInstance().getPlayers().forEach(this::readLocale);
|
||||
}, 5, 5, TimeUnit.SECONDS);
|
||||
|
||||
// TODO more default dependencies for bungee
|
||||
registerDependency(plugin.getClass(), plugin);
|
||||
registerDependency(Plugin.class, plugin);
|
||||
@@ -93,6 +105,17 @@ public class BungeeCommandManager extends CommandManager<
|
||||
return locales;
|
||||
}
|
||||
|
||||
public void readLocale(ProxiedPlayer player) {
|
||||
if (!player.isConnected()) {
|
||||
return;
|
||||
}
|
||||
|
||||
//This can be null if we didn't received a settings packet
|
||||
Locale locale = player.getLocale();
|
||||
if (locale != null) {
|
||||
setIssuerLocale(player, player.getLocale());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void registerCommand(BaseCommand command) {
|
||||
|
||||
Reference in New Issue
Block a user