geforkt von Mirrors/Velocity
Add /glist command.
A much-needed base command, this is now available in Velocity directly. It is partially inspired by the RedisBungee /glist command, which I also created. By default, /glist only provides the player count of the proxy. You can view the player list for an individual server with /glist <server>, or you can view the information for all players with /glist all.
Dieser Commit ist enthalten in:
Ursprung
b0b445c044
Commit
9e6e1856e6
@ -17,6 +17,7 @@ import com.velocitypowered.api.proxy.server.ServerInfo;
|
||||
import com.velocitypowered.api.util.Favicon;
|
||||
import com.velocitypowered.api.util.GameProfile;
|
||||
import com.velocitypowered.api.util.ProxyVersion;
|
||||
import com.velocitypowered.proxy.command.GlistCommand;
|
||||
import com.velocitypowered.proxy.command.ServerCommand;
|
||||
import com.velocitypowered.proxy.command.ShutdownCommand;
|
||||
import com.velocitypowered.proxy.command.VelocityCommand;
|
||||
@ -151,6 +152,7 @@ public class VelocityServer implements ProxyServer {
|
||||
commandManager.register(new VelocityCommand(this), "velocity");
|
||||
commandManager.register(new ServerCommand(this), "server");
|
||||
commandManager.register(new ShutdownCommand(this), "shutdown", "end");
|
||||
commandManager.register(new GlistCommand(this), "glist");
|
||||
|
||||
try {
|
||||
Path configPath = Paths.get("velocity.toml");
|
||||
|
112
proxy/src/main/java/com/velocitypowered/proxy/command/GlistCommand.java
Normale Datei
112
proxy/src/main/java/com/velocitypowered/proxy/command/GlistCommand.java
Normale Datei
@ -0,0 +1,112 @@
|
||||
package com.velocitypowered.proxy.command;
|
||||
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import com.velocitypowered.api.command.Command;
|
||||
import com.velocitypowered.api.command.CommandSource;
|
||||
import com.velocitypowered.api.permission.Tristate;
|
||||
import com.velocitypowered.api.proxy.Player;
|
||||
import com.velocitypowered.api.proxy.ProxyServer;
|
||||
import com.velocitypowered.api.proxy.server.RegisteredServer;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
import java.util.stream.Collectors;
|
||||
import net.kyori.text.TextComponent;
|
||||
import net.kyori.text.format.TextColor;
|
||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||
|
||||
public class GlistCommand implements Command {
|
||||
|
||||
private final ProxyServer server;
|
||||
|
||||
public GlistCommand(ProxyServer server) {
|
||||
this.server = server;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void execute(CommandSource source, String @NonNull [] args) {
|
||||
if (args.length == 0) {
|
||||
sendTotalProxyCount(source);
|
||||
source.sendMessage(
|
||||
TextComponent.builder("To view all players on servers, use ", TextColor.YELLOW)
|
||||
.append("/glist all", TextColor.DARK_AQUA)
|
||||
.append(".", TextColor.YELLOW)
|
||||
.build());
|
||||
} else if (args.length == 1) {
|
||||
String arg = args[0];
|
||||
if (arg.equalsIgnoreCase("all")) {
|
||||
for (RegisteredServer server : server.getAllServers()) {
|
||||
sendServerPlayers(source, server, true);
|
||||
}
|
||||
sendTotalProxyCount(source);
|
||||
} else {
|
||||
Optional<RegisteredServer> registeredServer = server.getServer(arg);
|
||||
if (!registeredServer.isPresent()) {
|
||||
source.sendMessage(
|
||||
TextComponent.of("Server " + arg + " doesn't exist.", TextColor.RED));
|
||||
return;
|
||||
}
|
||||
sendServerPlayers(source, registeredServer.get(), false);
|
||||
}
|
||||
} else {
|
||||
source.sendMessage(TextComponent.of("Too many arguments.", TextColor.RED));
|
||||
}
|
||||
}
|
||||
|
||||
private void sendTotalProxyCount(CommandSource target) {
|
||||
target.sendMessage(TextComponent.builder("There are ", TextColor.YELLOW)
|
||||
.append(Integer.toString(server.getAllPlayers().size()), TextColor.GREEN)
|
||||
.append(" player(s) online.", TextColor.YELLOW)
|
||||
.build());
|
||||
}
|
||||
|
||||
private void sendServerPlayers(CommandSource target, RegisteredServer server, boolean fromAll) {
|
||||
List<Player> onServer = ImmutableList.copyOf(server.getPlayersConnected());
|
||||
if (onServer.isEmpty() && fromAll) {
|
||||
return;
|
||||
}
|
||||
|
||||
TextComponent.Builder builder = TextComponent.builder()
|
||||
.append(TextComponent.of("[" + server.getServerInfo().getName() + "] ",
|
||||
TextColor.DARK_AQUA))
|
||||
.append("(" + onServer.size() + ")", TextColor.GRAY)
|
||||
.append(": ")
|
||||
.resetStyle();
|
||||
|
||||
for (int i = 0; i < onServer.size(); i++) {
|
||||
Player player = onServer.get(i);
|
||||
builder.append(player.getUsername());
|
||||
|
||||
if (i + 1 < onServer.size()) {
|
||||
builder.append(", ");
|
||||
}
|
||||
}
|
||||
|
||||
target.sendMessage(builder.build());
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<String> suggest(CommandSource source, String @NonNull [] currentArgs) {
|
||||
ImmutableList.Builder<String> options = ImmutableList.builder();
|
||||
for (RegisteredServer server : server.getAllServers()) {
|
||||
options.add(server.getServerInfo().getName());
|
||||
}
|
||||
options.add("all");
|
||||
|
||||
switch (currentArgs.length) {
|
||||
case 0:
|
||||
return options.build();
|
||||
case 1:
|
||||
return options.build().stream()
|
||||
.filter(o -> o.regionMatches(true, 0, currentArgs[0], 0, currentArgs[0].length()))
|
||||
.collect(ImmutableList.toImmutableList());
|
||||
default:
|
||||
return ImmutableList.of();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasPermission(CommandSource source, String @NonNull [] args) {
|
||||
return source.getPermissionValue("velocity.command.glist") == Tristate.TRUE;
|
||||
}
|
||||
}
|
Laden…
In neuem Issue referenzieren
Einen Benutzer sperren