Merge branch 'main' into Backend/new-auth

This commit is contained in:
2025-02-25 22:39:59 +01:00
91 changed files with 9159 additions and 13 deletions
@@ -20,6 +20,7 @@
package de.steamwar.velocitycore.commands;
import com.velocitypowered.api.proxy.Player;
import com.velocitypowered.api.proxy.ServerConnection;
import com.velocitypowered.api.proxy.server.RegisteredServer;
import com.velocitypowered.api.proxy.server.ServerInfo;
import de.steamwar.command.PreviousArguments;
@@ -34,22 +35,29 @@ import de.steamwar.velocitycore.VelocityCore;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.stream.Collectors;
public class SendCommand extends SWCommand {
// /send to <server> only [<users>]
// <server> can also be current
public SendCommand() {
super("send", UserPerm.TEAM);
}
@Register
public void sendToServer(Chatter sender, Player send, RegisteredServer server) {
send.createConnectionRequest(server).fireAndForget();
@Register("to")
public void sendCommand(Chatter sender, RegisteredServer toServer, @ArrayLength(min = 1) Player... players) {
for (Player player : players) {
player.createConnectionRequest(toServer).fireAndForget();
}
}
@ClassMapper(value = RegisteredServer.class, local = true)
public TypeMapper<RegisteredServer> subserverTypeMapper() {
return new TypeMapper<>() {
private boolean check(SteamwarUser user, RegisteredServer registeredServer) {
if (registeredServer == null) return false;
ServerInfo serverInfo = registeredServer.getServerInfo();
String name = serverInfo.getName();
if (name.contains(" ")) return false;
@@ -66,20 +74,55 @@ public class SendCommand extends SWCommand {
return registeredServer;
}
}
RegisteredServer currentServer = sender.getPlayer().getCurrentServer().map(ServerConnection::getServer).orElse(null);
if (s.equals("current") && check(user, currentServer)) {
return currentServer;
}
return null;
}
@Override
public Collection<String> tabCompletes(Chatter sender, PreviousArguments previousArguments, String s) {
SteamwarUser user = sender.user();
List<RegisteredServer> previous = previousArguments.getAll(RegisteredServer.class);
List<String> tabCompletes = new ArrayList<>();
for (RegisteredServer registeredServer : VelocityCore.getProxy().getAllServers()) {
if (previous.contains(registeredServer)) continue;
if (check(user, registeredServer)) {
tabCompletes.add(registeredServer.getServerInfo().getName());
}
}
Player player = sender.getPlayer();
if (player != null) {
RegisteredServer currentServer = player.getCurrentServer().map(ServerConnection::getServer).orElse(null);
if (currentServer != null && !previous.contains(currentServer) && check(user, currentServer)) {
tabCompletes.add("current");
}
}
return tabCompletes;
}
};
}
@ClassMapper(value = Player.class, local = true)
public TypeMapper<Player> playerTypeMapper() {
return new TypeMapper<>() {
@Override
public Player map(Chatter sender, PreviousArguments previousArguments, String s) {
return VelocityCore.getProxy().getPlayer(s).orElse(null);
}
@Override
public Collection<String> tabCompletes(Chatter sender, PreviousArguments previousArguments, String s) {
List<RegisteredServer> previous = previousArguments.getAll(RegisteredServer.class);
if (previous.isEmpty()) return null;
Collection<Player> players = previous.get(0).getPlayersConnected();
return VelocityCore.getProxy().getAllPlayers().stream().filter(player -> !players.contains(player)).map(Player::getUsername).collect(Collectors.toList());
}
};
}
}