forked from SteamWar/SteamWar
Merge pull request 'VelocityCore/SendCommand2.0' (#18) from VelocityCore/SendCommand2.0 into main
Reviewed-on: SteamWar/SteamWar#18 Reviewed-by: Lixfel <lixfel@noreply.localhost>
This commit is contained in:
@@ -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());
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user