Final Hotfix of Send Command!

This commit is contained in:
2025-03-02 19:09:59 +01:00
parent f0beb22856
commit 85c0db873c
3 changed files with 37 additions and 11 deletions
@@ -27,6 +27,7 @@ import de.steamwar.command.PreviousArguments;
import de.steamwar.command.SWCommand;
import de.steamwar.command.TypeMapper;
import de.steamwar.messages.Chatter;
import de.steamwar.messages.Message;
import de.steamwar.persistent.Subserver;
import de.steamwar.sql.SteamwarUser;
import de.steamwar.sql.UserPerm;
@@ -47,24 +48,27 @@ public class SendCommand extends SWCommand {
@Register("to")
public void sendCommand(Chatter sender, RegisteredServer toServer, Player... players) {
String serverName = toServer.getServerInfo().getName();
for (Player player : players) {
player.createConnectionRequest(toServer).fireAndForget();
Chatter.of(player).send(true, null, null, new Message("SEND_MESSAGE", sender.user().getUserName(), serverName));
}
sender.send(true, null, null, new Message("SEND_MESSAGE_SELF", players.length, serverName));
}
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;
Subserver subserver = Subserver.getSubserver(serverInfo);
return subserver == null || Subserver.isArena(subserver) || (Subserver.isBuilder(subserver) && user.hasPerm(UserPerm.BUILD));
}
@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;
Subserver subserver = Subserver.getSubserver(serverInfo);
return subserver == null || Subserver.isArena(subserver) || (Subserver.isBuilder(subserver) && user.hasPerm(UserPerm.BUILD));
}
@Override
public RegisteredServer map(Chatter sender, PreviousArguments previousArguments, String s) {
SteamwarUser user = sender.user();
@@ -115,12 +119,26 @@ public class SendCommand extends SWCommand {
return VelocityCore.getProxy().getPlayer(s).orElse(null);
}
@Override
public boolean validate(Chatter sender, Player value, MessageSender messageSender) {
SteamwarUser user = sender.user();
if (user.hasPerm(UserPerm.ADMINISTRATION)) return true;
return check(user, value.getCurrentServer().map(ServerConnection::getServer).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;
SteamwarUser user = sender.user();
Collection<Player> players = previous.get(0).getPlayersConnected();
return VelocityCore.getProxy().getAllPlayers().stream().filter(player -> !players.contains(player)).map(Player::getUsername).collect(Collectors.toList());
return VelocityCore.getProxy()
.getAllPlayers()
.stream()
.filter(player -> !players.contains(player))
.filter(player -> user.hasPerm(UserPerm.ADMINISTRATION) || check(user, player.getCurrentServer().map(ServerConnection::getServer).orElse(null)))
.map(Player::getUsername)
.collect(Collectors.toList());
}
};
}