Display banned status in Steam lobbies

This commit is contained in:
Anuken
2023-12-05 15:43:33 -05:00
parent 351c2c84f2
commit 3232e97d1a
2 changed files with 21 additions and 5 deletions

View File

@@ -107,6 +107,9 @@ public class SNet implements SteamNetworkingCallback, SteamMatchmakingCallback,
Events.on(WaveEvent.class, e -> updateWave());
Events.run(Trigger.newGame, this::updateWave);
Events.on(PlayerIpBanEvent.class, e -> updateBans(e.ip));
Events.on(PlayerIpUnbanEvent.class, e -> updateBans(e.ip));
}
public boolean isSteamClient(){
@@ -207,6 +210,12 @@ public class SNet implements SteamNetworkingCallback, SteamMatchmakingCallback,
}
}
/** Updates the ban list so that lobbies don't appear for banned players. The list will only be updated when a steam player is banned/unbanned. */
void updateBans(String changed){
if(changed != null && !changed.startsWith("steam:")) return; //hacky way to ignore non-steam ids
smat.setLobbyData(currentLobby, "banned", netServer.admins.bannedIPs.select(ip -> ip.contains("steam:")).reduce(new StringBuilder(), (ip, str) -> str.append(ip.substring(6)).append(',')).toString()); //list of handles split by commas
}
@Override
public void closeServer(){
provider.closeServer();
@@ -321,6 +330,11 @@ public class SNet implements SteamNetworkingCallback, SteamMatchmakingCallback,
String mode = smat.getLobbyData(lobby, "gamemode");
//make sure versions are equal, don't list incompatible lobbies
if(mode == null || mode.isEmpty() || (Version.build != -1 && Strings.parseInt(smat.getLobbyData(lobby, "version"), -1) != Version.build)) continue;
String banList = smat.getLobbyData(lobby, "banned");
boolean banned = banList.length() > 0 && Structs.contains(banList.split(","), SVars.user.user.getSteamID().getAccountID() + "");
Host out = new Host(
-1, //invalid ping
smat.getLobbyData(lobby, "name"),
@@ -332,7 +346,7 @@ public class SNet implements SteamNetworkingCallback, SteamMatchmakingCallback,
smat.getLobbyData(lobby, "versionType"),
Gamemode.valueOf(mode),
smat.getLobbyMemberLimit(lobby),
"",
banned ? "[banned]" : "",
null
);
hosts.add(out);
@@ -365,6 +379,7 @@ public class SNet implements SteamNetworkingCallback, SteamMatchmakingCallback,
smat.setLobbyData(steamID, "versionType", Version.type);
smat.setLobbyData(steamID, "wave", state.wave + "");
smat.setLobbyData(steamID, "gamemode", state.rules.mode().name() + "");
updateBans(null);
}
}