nosince all the replies here have likes, may i have one too?
This is one of the least optimised methods you could possibly do. For scaling-up performance, you want to know how to write efficient code. Let's put this into a larger perspective: Imagine the code base is for thousands of players at a single time - your code would hold up the server to an extent. I know this is only sending a message, but you would be doing constant checks for every player online, whenever you wanted to send a party message.Code:String message = ...; Player sender = ...; for (Player player : Bukkit.getOnlinePlayers()) { if (Parties.areInSameParty(sender, player) { player.sendMessage(message); } }
public final class Party {
public static Builder builder()
{
return new Builder();
}
public static final class Builder implements org.apache.commons.lang3.builder.Builder<Party>
{
private UUID owner;
private Set<UUID> members;
Builder()
{
}
@Override
public Party build()
{
Objects.requireNonNull(this.owner, "owner");
return new Party(this.owner, this.members == null ? new HashSet<>() : this.members);
}
public Builder setOwner(UUID owner)
{
this.owner = owner;
return this;
}
public Builder setMembers(Collection<UUID> members)
{
Objects.requireNonNull(members, "members");
this.members = new HashSet<>(members);
return this;
}
public Builder addMember(UUID uniqueId)
{
Objects.requireNonNull(uniqueId, "uniqueId");
this.members.add(uniqueId);
return this;
}
}
private UUID owner;
private final Set<UUID> members = ConcurrentHashMap.newKeySet();
Party(UUID owner, Set<UUID> members)
{
this.owner = owner;
this.members.addAll(members);
}
public UUID getOwner()
{
return this.owner;
}
public Set<UUID> getMembers()
{
return Collections.unmodifiableSet(this.members);
}
public void addMember(UUID uniqueId)
{
this.members.add(uniqueId);
}
public void removeMember(UUID uniqueId)
{
this.members.remove(uniqueId);
}
public boolean isMember(UUID uniqueId)
{
return this.members.contains(uniqueId);
}
public void sendPartyMessage(String message)
{
this.members.stream()
.map(Bukkit::getPlayer)
.filter(Objects::nonNull)
.forEach(player -> player.sendMessage(message));
}
}
