Deletes teams, gets players/entities of a team

This commit is contained in:
R0bbyYT 2020-08-05 11:02:54 +02:00
parent 4127eea401
commit 70c969ced7
2 changed files with 99 additions and 0 deletions

View File

@ -1,12 +1,17 @@
package net.minestom.server.scoreboard;
import io.netty.buffer.ByteBuf;
import net.minestom.server.MinecraftServer;
import net.minestom.server.chat.ChatColor;
import net.minestom.server.chat.ColoredText;
import net.minestom.server.entity.LivingEntity;
import net.minestom.server.entity.Player;
import net.minestom.server.network.PacketWriterUtils;
import net.minestom.server.network.packet.server.ServerPacket;
import net.minestom.server.utils.UniqueIdUtils;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import java.util.concurrent.CopyOnWriteArraySet;
@ -37,6 +42,30 @@ public final class TeamManager {
this.broadcastPacket(team.getTeamsCreationPacket());
}
/**
* Deletes a {@link Team}
*
* @param registryName The registry name of team
* @return {@code true} if the team was deleted, otherwise {@code false}
*/
public boolean deleteTeam(String registryName) {
Team team = this.getTeam(registryName);
if (team == null) return false;
return this.deleteTeam(team);
}
/**
* Deletes a {@link Team}
*
* @param team The team to be deleted
* @return {@code true} if the team was deleted, otherwise {@code false}
*/
public boolean deleteTeam(Team team) {
// Sends to all online players a team destroy packet
this.broadcastBuffer(team.getTeamsDestroyPacket());
return this.teams.remove(team);
}
/**
* Initializes a new {@link TeamBuilder} for creating a team
*
@ -120,6 +149,42 @@ public final class TeamManager {
return this.exists(team.getTeamName());
}
/**
* Gets a {@link List} with all registered {@link Player} in the team
* <br>
* <b>Note:</b> The list exclude all entities. To get all entities of the team, you can use {@link #getEntities(Team)}
*
* @param team The team
* @return a {@link List} with all registered {@link Player}
*/
public List<String> getPlayers(Team team) {
List<String> players = new ArrayList<>();
for (String member : team.getMembers()) {
boolean match = UniqueIdUtils.isUniqueId(member);
if (!match) players.add(member);
}
return players;
}
/**
* Gets a {@link List} with all registered {@link LivingEntity} in the team
* <br>
* <b>Note:</b> The list exclude all players. To get all players of the team, you can use {@link #getPlayers(Team)}
*
* @param team The team
* @return a {@link List} with all registered {@link LivingEntity}
*/
public List<String> getEntities(Team team) {
List<String> entities = new ArrayList<>();
for (String member : team.getMembers()) {
boolean match = UniqueIdUtils.isUniqueId(member);
if (match) entities.add(member);
}
return entities;
}
/**
* Gets a {@link Set} with all registered {@link Team}'s
*
@ -137,4 +202,15 @@ public final class TeamManager {
private void broadcastPacket(ServerPacket packet) {
PacketWriterUtils.writeAndSend(MinecraftServer.getConnectionManager().getOnlinePlayers(), packet);
}
/**
* Broadcasts to all online {@link Player}'s a buffer
*
* @param buffer The buffer to broadcast
*/
private void broadcastBuffer(ByteBuf buffer) {
for (Player onlinePlayer : MinecraftServer.getConnectionManager().getOnlinePlayers()) {
onlinePlayer.getPlayerConnection().sendPacket(buffer, true);
}
}
}

View File

@ -0,0 +1,23 @@
package net.minestom.server.utils;
import java.util.UUID;
import java.util.regex.Pattern;
/**
* An utilities class for {@link UUID}
*/
public class UniqueIdUtils {
public static final Pattern UNIQUE_ID_PATTERN = Pattern.compile("\\b[0-9a-f]{8}\\b-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-\\b[0-9a-f]{12}\\b");
/**
* Checks whether the {@code input} string is an {@link UUID}
*
* @param input The input string to be checked
* @return {@code true} if the input an unique identifier, otherwise {@code false}
*/
public static boolean isUniqueId(String input) {
return input.matches(UNIQUE_ID_PATTERN.pattern());
}
}