Bukkit Coding : What code can i send message all player only in my party ?

Status
This thread has been locked.

Kangarool

Feedback score
0
Posts
26
Reactions
5
Resources
0
What code can i send message all player only in my party ?

I've created a party plugin, But I can't make a code to send message to all player on my party.

I'm sorry, I'm not good in english and coding.
 
PebbleHost
High performance, consistent uptime and fast support. Minecraft hosting that just works.

tassu

taavi.wtf
Premium
Feedback score
6
Posts
76
Reactions
11
Resources
0
Code:
String message = ...;
Player sender = ...;
for (Player player : Bukkit.getOnlinePlayers()) {
    if (Parties.areInSameParty(sender, player) {
         player.sendMessage(message);
    }
}
 

Inkzzz

Feedback score
1
Posts
423
Reactions
221
Resources
0
Code:
String message = ...;
Player sender = ...;
for (Player player : Bukkit.getOnlinePlayers()) {
    if (Parties.areInSameParty(sender, player) {
         player.sendMessage(message);
    }
}
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.

As previously mentioned, it would be ideal to have a party object which handles everything. Takes for instance:

Code:
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));
    }
  
}

The code above would be a more preferred example. You could go a step further and cache which players are online in the party. I am sure you can work how to do that out.
 
Status
This thread has been locked.
Top