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
@@ -0,0 +1,28 @@
package co.aikar.commands;
import org.spongepowered.api.entity.living.player.Player;
import org.spongepowered.api.event.Listener;
import org.spongepowered.api.event.Order;
import org.spongepowered.api.event.entity.living.humanoid.player.PlayerChangeClientSettingsEvent;
import org.spongepowered.api.event.filter.cause.First;
import org.spongepowered.api.event.network.ClientConnectionEvent;
public class ACFSpongeListener {
private final SpongeCommandManager manager;
public ACFSpongeListener(SpongeCommandManager manager) {
this.manager = manager;
}
@Listener(order = Order.POST)
public void onSettingsChange(PlayerChangeClientSettingsEvent changeSettingsEvent, @First Player targetPlayer) {
//this event will be fired on join as well as every time the player changes it
manager.setIssuerLocale(targetPlayer, targetPlayer.getLocale());
}
@Listener
public void onDisconnectCleanup(ClientConnectionEvent.Disconnect disconnectEvent, @First Player player) {
manager.issuersLocale.remove(player.getUniqueId());
}
}
@@ -23,11 +23,15 @@
package co.aikar.commands;
import org.jetbrains.annotations.NotNull;
import org.spongepowered.api.command.CommandSource;
import org.spongepowered.api.entity.living.player.Player;
import org.spongepowered.api.text.serializer.TextSerializers;
import org.spongepowered.api.util.Identifiable;
import java.nio.charset.StandardCharsets;
import java.util.Objects;
import java.util.UUID;
public class SpongeCommandIssuer implements CommandIssuer {
@@ -49,6 +53,16 @@ public class SpongeCommandIssuer implements CommandIssuer {
return this.source;
}
@Override
public @NotNull UUID getUniqueId() {
if (isPlayer()) {
return ((Identifiable) source).getUniqueId();
}
//generate a unique id based of the name (like for the console command sender)
return UUID.nameUUIDFromBytes(source.getName().getBytes(StandardCharsets.UTF_8));
}
public Player getPlayer() {
return isPlayer() ? (Player) source : null;
}
@@ -68,7 +82,6 @@ public class SpongeCommandIssuer implements CommandIssuer {
return this.source.hasPermission(permission);
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
@@ -68,6 +68,8 @@ public class SpongeCommandManager extends CommandManager<
this.formatters.put(MessageType.HELP, new SpongeMessageFormatter(TextColors.AQUA, TextColors.GREEN, TextColors.YELLOW));
getLocales(); // auto load locales
Sponge.getEventManager().registerListeners(plugin, new ACFSpongeListener(this));
//TODO more default dependencies for sponge
registerDependency(plugin.getClass(), plugin);
}
@@ -196,5 +198,4 @@ public class SpongeCommandManager extends CommandManager<
public SpongeConditionContext createConditionContext(CommandIssuer issuer, String config) {
return new SpongeConditionContext((SpongeCommandIssuer) issuer, config);
}
}