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:
games647
2018-02-28 23:53:27 +01:00
committed by Daniel Ennis
parent c3ee9d4f20
commit edf7ecc020
12 changed files with 179 additions and 29 deletions
@@ -25,6 +25,9 @@ package co.aikar.commands;
import co.aikar.locales.MessageKey;
import co.aikar.locales.MessageKeyProvider;
import org.jetbrains.annotations.NotNull;
import java.util.UUID;
public interface CommandIssuer {
/**
@@ -50,6 +53,11 @@ public interface CommandIssuer {
getManager().sendMessage(this, MessageType.INFO, MessageKeys.INFO_MESSAGE, "{message}", message);
}
/**
* @return the unique id of that issuer
*/
@NotNull UUID getUniqueId();
/**
* Has permission node
* @param permission
@@ -27,6 +27,7 @@ import co.aikar.commands.annotation.Dependency;
import co.aikar.locales.MessageKeyProvider;
import com.google.common.collect.HashBasedTable;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.google.common.collect.Sets;
import com.google.common.collect.Table;
import org.jetbrains.annotations.NotNull;
@@ -35,14 +36,16 @@ import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.lang.reflect.Parameter;
import java.util.Arrays;
import java.util.HashMap;
import java.util.IdentityHashMap;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.Objects;
import java.util.Set;
import java.util.Stack;
import java.util.UUID;
@SuppressWarnings("WeakerAccess")
public abstract class CommandManager <
@@ -76,6 +79,8 @@ public abstract class CommandManager <
protected MF defaultFormatter;
protected int defaultHelpPerPage = 10;
protected Map<UUID, Locale> issuersLocale = Maps.newConcurrentMap();
private Set<String> unstableAPIs = Sets.newHashSet();
public static CommandOperationContext getCurrentCommandOperationContext() {
@@ -344,7 +349,25 @@ public abstract class CommandManager <
});
}
public Locale setIssuerLocale(IT issuer, Locale locale) {
I commandIssuer = getCommandIssuer(issuer);
Locale old = issuersLocale.put(commandIssuer.getUniqueId(), locale);
if (!Objects.equals(old, locale)) {
this.notifyLocaleChange(commandIssuer, old, locale);
}
return old;
}
public Locale getIssuerLocale(CommandIssuer issuer) {
if (usingPerIssuerLocale()) {
Locale locale = issuersLocale.get(issuer.getUniqueId());
if (locale != null) {
return locale;
}
}
return getLocales().getDefaultLocale();
}