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
@@ -127,6 +127,10 @@ HELP_BAU_LOCK_HOVER=§eLock your build server
HELP_BAU_UNLOCK=§8/§ebuild unlock §8- §7Unlocks the buildserver for added users
HELP_BAU_UNLOCK_HOVER=§eUnlock your build server
#Send Command
SEND_MESSAGE=§e{0}§7 send you to §e{1}§8!
SEND_MESSAGE_SELF=§eYou§7 send §e{0}§7 to §e{1}§8!
#Usage description of various commands
USAGE_ALERT=§8/§7alert §8[§emessage§8]
USAGE_IGNORE=§8/§7ignore §8[§eplayer§8]
@@ -112,6 +112,10 @@ HELP_BAU_LOCK_HOVER=§eSperre deinen Bau
HELP_BAU_UNLOCK=§8/§ebau unlock §8- §7Öffne deinen Bauserver für alle hinzugefügten Spieler
HELP_BAU_UNLOCK_HOVER=§eÖffne deinen Bau
#Send Command
SEND_MESSAGE=§e{0}§7 hat dich auf §e{1}§7 gesendet§8!
SEND_MESSAGE_SELF=§eDu§7 hast §e{0}§7 auf §e{1}§7 gesendet§8!
#Usage description of various commands
USAGE_ALERT=§8/§7alert §8[§eNachricht§8]
USAGE_IGNORE=§8/§7ignore §8[§eSpieler§8]
@@ -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());
}
};
}