mirror of
https://github.com/aikar/commands.git
synced 2026-06-01 06:41:56 +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,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);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user