diff --git a/src/main/java/io/graversen/minecraft/rcon/query/playerlist/PlayerNames.java b/src/main/java/io/graversen/minecraft/rcon/query/playerlist/PlayerNames.java new file mode 100644 index 0000000..6f909a4 --- /dev/null +++ b/src/main/java/io/graversen/minecraft/rcon/query/playerlist/PlayerNames.java @@ -0,0 +1,15 @@ +package io.graversen.minecraft.rcon.query.playerlist; + +import java.util.List; + +public class PlayerNames { + private final List playerNames; + + PlayerNames(List playerNames) { + this.playerNames = playerNames; + } + + public List getPlayerNames() { + return playerNames; + } +} diff --git a/src/main/java/io/graversen/minecraft/rcon/query/playerlist/PlayerNamesMapper.java b/src/main/java/io/graversen/minecraft/rcon/query/playerlist/PlayerNamesMapper.java new file mode 100644 index 0000000..b45c486 --- /dev/null +++ b/src/main/java/io/graversen/minecraft/rcon/query/playerlist/PlayerNamesMapper.java @@ -0,0 +1,41 @@ +package io.graversen.minecraft.rcon.query.playerlist; + +import io.graversen.minecraft.rcon.RconResponse; +import io.graversen.minecraft.rcon.query.IRconResponseMapper; + +import java.util.Arrays; +import java.util.List; +import java.util.regex.Pattern; +import java.util.stream.Collectors; + +public class PlayerNamesMapper implements IRconResponseMapper { + static final Pattern PATTERN_INSIDE_PARENTHESIS = Pattern.compile("\\(.*\\)"); + static final Pattern PATTERN_INITIAL = Pattern.compile(":"); + static final Pattern PATTERN_PLAYERS = Pattern.compile(","); + + @Override + public PlayerNames apply(RconResponse rconResponse) { + if (rconResponse.getResponseString() != null) { + final String responseString = rconResponse.getResponseString().trim(); + final String[] players = responseString.split(PATTERN_INITIAL.pattern()); + + if (players.length == 2) { + return extractPlayerList(players[1]); + } else { + return new PlayerNames(List.of()); + } + } + + return new PlayerNames(List.of()); + + } + + private PlayerNames extractPlayerList(String playersRaw) { + final var players = Arrays.stream(playersRaw.split(PATTERN_PLAYERS.pattern())) + .map(playerRaw -> playerRaw.replaceAll(PATTERN_INSIDE_PARENTHESIS.pattern(), "")) + .map(String::trim) + .collect(Collectors.toUnmodifiableList()); + + return new PlayerNames(players); + } +} diff --git a/src/main/java/io/graversen/minecraft/rcon/query/playerlist/PlayerList.java b/src/main/java/io/graversen/minecraft/rcon/query/playerlist/PlayerUuids.java similarity index 77% rename from src/main/java/io/graversen/minecraft/rcon/query/playerlist/PlayerList.java rename to src/main/java/io/graversen/minecraft/rcon/query/playerlist/PlayerUuids.java index c2ca7d0..5339edb 100644 --- a/src/main/java/io/graversen/minecraft/rcon/query/playerlist/PlayerList.java +++ b/src/main/java/io/graversen/minecraft/rcon/query/playerlist/PlayerUuids.java @@ -2,10 +2,10 @@ import java.util.List; -public class PlayerList { +public class PlayerUuids { private final List playerUuids; - PlayerList(List playerUuids) { + PlayerUuids(List playerUuids) { this.playerUuids = playerUuids; } diff --git a/src/main/java/io/graversen/minecraft/rcon/query/playerlist/PlayerListMapper.java b/src/main/java/io/graversen/minecraft/rcon/query/playerlist/PlayerUuidsMapper.java similarity index 67% rename from src/main/java/io/graversen/minecraft/rcon/query/playerlist/PlayerListMapper.java rename to src/main/java/io/graversen/minecraft/rcon/query/playerlist/PlayerUuidsMapper.java index e1ff457..9885a74 100644 --- a/src/main/java/io/graversen/minecraft/rcon/query/playerlist/PlayerListMapper.java +++ b/src/main/java/io/graversen/minecraft/rcon/query/playerlist/PlayerUuidsMapper.java @@ -9,32 +9,32 @@ import java.util.regex.Pattern; import java.util.stream.Collectors; -public class PlayerListMapper implements IRconResponseMapper { +public class PlayerUuidsMapper implements IRconResponseMapper { static final Pattern PATTERN_INITIAL = Pattern.compile(":"); static final Pattern PATTERN_PLAYERS = Pattern.compile(","); @Override - public PlayerList apply(RconResponse rconResponse) { + public PlayerUuids apply(RconResponse rconResponse) { if (rconResponse.getResponseString() != null) { final String responseString = rconResponse.getResponseString().trim(); final String[] players = responseString.split(PATTERN_INITIAL.pattern()); if (players.length == 2) { - return extractPlayerUuids(players[1]); + return extractPlayerList(players[1]); } else { - return new PlayerList(List.of()); + return new PlayerUuids(List.of()); } } - return new PlayerList(List.of()); + return new PlayerUuids(List.of()); } - private PlayerList extractPlayerUuids(String players) { - final var playerUuids = Arrays.stream(players.split(PATTERN_PLAYERS.pattern())) + private PlayerUuids extractPlayerList(String playersRaw) { + final var players = Arrays.stream(playersRaw.split(PATTERN_PLAYERS.pattern())) .map(String::trim) .map(player -> StringUtils.substringBetween(player, "(", ")")) .collect(Collectors.toUnmodifiableList()); - return new PlayerList(playerUuids); + return new PlayerUuids(players); } }