Skip to content

Commit c1359ac

Browse files
committed
example(team): prevent duplicate entries for the same player & improve team cleanup
1 parent 0291d37 commit c1359ac

4 files changed

Lines changed: 64 additions & 72 deletions

File tree

docs/developers/modules/team.mdx

Lines changed: 29 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -45,9 +45,7 @@ private void onPlayerQuit(PlayerQuitEvent event) {
4545
Player player = event.getPlayer();
4646

4747
this.getByPlayerUuid(player.getUniqueId()).ifPresent(team -> {
48-
if (team.getMembers().size() == 1) {
49-
this.deleteTeam(team.getTeamId());
50-
}
48+
team.removeMember(player);
5149
});
5250
}
5351

@@ -89,20 +87,20 @@ private void runFoliaTeamUpdateTask() {
8987
public class Team {
9088

9189
private final UUID teamId;
92-
private final Set<Player> members;
90+
private final Map<UUID, Player> members;
9391

9492
public Team() {
9593
this.teamId = UUID.randomUUID();
96-
this.members = Sets.newHashSet();
94+
this.members = new HashMap<>();
9795
}
9896

9997
public void addMember(Player player) {
100-
this.members.add(player);
98+
this.members.put(player.getUniqueId(), player);
10199
TeamApiExample.this.teamsByPlayerUuid.put(player.getUniqueId(), this);
102100
}
103101

104102
public void removeMember(Player player) {
105-
this.members.remove(player);
103+
this.members.remove(player.getUniqueId());
106104
TeamApiExample.this.teamsByPlayerUuid.remove(player.getUniqueId());
107105

108106
Apollo.getPlayerManager().getPlayer(player.getUniqueId())
@@ -130,20 +128,21 @@ public class Team {
130128

131129
// The refresh method used for updating members locations
132130
public void refresh() {
133-
List<TeamMember> teammates = this.members.stream().filter(Player::isOnline)
131+
List<TeamMember> teammates = this.members.values()
132+
.stream().filter(Player::isOnline)
134133
.map(this::createTeamMember)
135134
.collect(Collectors.toList());
136135

137-
this.members.forEach(member -> Apollo.getPlayerManager().getPlayer(member.getUniqueId())
136+
this.members.values().forEach(member -> Apollo.getPlayerManager().getPlayer(member.getUniqueId())
138137
.ifPresent(apolloPlayer -> TeamApiExample.this.teamModule.updateTeamMembers(apolloPlayer, teammates)));
139138
}
140139

141140
public UUID getTeamId() {
142141
return this.teamId;
143142
}
144143

145-
public Set<Player> getMembers() {
146-
return this.members;
144+
public Collection<Player> getMembers() {
145+
return this.members.values();
147146
}
148147

149148
@Override
@@ -256,9 +255,7 @@ private void onPlayerQuit(PlayerQuitEvent event) {
256255
Player player = event.getPlayer();
257256

258257
this.getByPlayerUuid(player.getUniqueId()).ifPresent(team -> {
259-
if (team.getMembers().size() == 1) {
260-
this.deleteTeam(team.getTeamId());
261-
}
258+
team.removeMember(player);
262259
});
263260
}
264261

@@ -300,20 +297,20 @@ private void runFoliaTeamUpdateTask() {
300297
public class Team {
301298

302299
private final UUID teamId;
303-
private final Set<Player> members;
300+
private final Map<UUID, Player> members;
304301

305302
public Team() {
306303
this.teamId = UUID.randomUUID();
307-
this.members = Sets.newHashSet();
304+
this.members = new HashMap<>();
308305
}
309306

310307
public void addMember(Player player) {
311-
this.members.add(player);
308+
this.members.put(player.getUniqueId(), player);
312309
TeamProtoExample.this.teamsByPlayerUuid.put(player.getUniqueId(), this);
313310
}
314311

315312
public void removeMember(Player player) {
316-
this.members.remove(player);
313+
this.members.remove(player.getUniqueId());
317314
TeamProtoExample.this.teamsByPlayerUuid.remove(player.getUniqueId());
318315

319316
ResetTeamMembersMessage message = ResetTeamMembersMessage.getDefaultInstance();
@@ -336,23 +333,23 @@ public class Team {
336333

337334
// The refresh method used for updating members locations
338335
public void refresh() {
339-
List<TeamMember> teammates = this.members.stream().filter(Player::isOnline)
336+
List<TeamMember> teammates = this.members.values().stream().filter(Player::isOnline)
340337
.map(this::createTeamMember)
341338
.collect(Collectors.toList());
342339

343340
UpdateTeamMembersMessage message = UpdateTeamMembersMessage.newBuilder()
344341
.addAllMembers(teammates)
345342
.build();
346343

347-
this.members.forEach(member -> ProtobufPacketUtil.sendPacket(member, message));
344+
this.members.values().forEach(member -> ProtobufPacketUtil.sendPacket(member, message));
348345
}
349346

350347
public UUID getTeamId() {
351348
return this.teamId;
352349
}
353350

354-
public Set<Player> getMembers() {
355-
return this.members;
351+
public Collection<Player> getMembers() {
352+
return this.members.values();
356353
}
357354

358355
@Override
@@ -399,9 +396,7 @@ private void onPlayerQuit(PlayerQuitEvent event) {
399396
Player player = event.getPlayer();
400397

401398
this.getByPlayerUuid(player.getUniqueId()).ifPresent(team -> {
402-
if (team.getMembers().size() == 1) {
403-
this.deleteTeam(team.getTeamId());
404-
}
399+
team.removeMember(player);
405400
});
406401
}
407402

@@ -443,20 +438,20 @@ private void runFoliaTeamUpdateTask() {
443438
public class Team {
444439

445440
private final UUID teamId;
446-
private final Set<Player> members;
441+
private final Map<UUID, Player> members;
447442

448443
public Team() {
449444
this.teamId = UUID.randomUUID();
450-
this.members = Sets.newHashSet();
445+
this.members = new HashMap<>();
451446
}
452447

453448
public void addMember(Player player) {
454-
this.members.add(player);
449+
this.members.put(player.getUniqueId(), player);
455450
TeamJsonExample.this.teamsByPlayerUuid.put(player.getUniqueId(), this);
456451
}
457452

458453
public void removeMember(Player player) {
459-
this.members.remove(player);
454+
this.members.remove(player.getUniqueId());
460455
TeamJsonExample.this.teamsByPlayerUuid.remove(player.getUniqueId());
461456

462457
JsonObject message = new JsonObject();
@@ -482,23 +477,24 @@ public class Team {
482477

483478
// The refresh method used for updating members locations
484479
public void refresh() {
485-
JsonArray teammates = this.members.stream().filter(Player::isOnline)
480+
JsonArray teammates = this.members.values()
481+
.stream().filter(Player::isOnline)
486482
.map(this::createTeamMember)
487483
.collect(JsonArray::new, JsonArray::add, JsonArray::addAll);
488484

489485
JsonObject message = new JsonObject();
490486
message.addProperty("@type", "type.googleapis.com/lunarclient.apollo.team.v1.UpdateTeamMembersMessage");
491487
message.add("members", teammates);
492488

493-
this.members.forEach(member -> JsonPacketUtil.sendPacket(member, message));
489+
this.members.values().forEach(member -> JsonPacketUtil.sendPacket(member, message));
494490
}
495491

496492
public UUID getTeamId() {
497493
return this.teamId;
498494
}
499495

500-
public Set<Player> getMembers() {
501-
return this.members;
496+
public Collection<Player> getMembers() {
497+
return this.members.values();
502498
}
503499

504500
@Override

example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/module/TeamApiExample.java

Lines changed: 12 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@
2424
package com.lunarclient.apollo.example.api.module;
2525

2626
import com.google.common.collect.Maps;
27-
import com.google.common.collect.Sets;
2827
import com.lunarclient.apollo.Apollo;
2928
import com.lunarclient.apollo.common.location.ApolloLocation;
3029
import com.lunarclient.apollo.example.ApolloExamplePlugin;
@@ -33,10 +32,11 @@
3332
import com.lunarclient.apollo.module.team.TeamMember;
3433
import com.lunarclient.apollo.module.team.TeamModule;
3534
import java.awt.Color;
35+
import java.util.Collection;
36+
import java.util.HashMap;
3637
import java.util.List;
3738
import java.util.Map;
3839
import java.util.Optional;
39-
import java.util.Set;
4040
import java.util.UUID;
4141
import java.util.concurrent.TimeUnit;
4242
import java.util.stream.Collectors;
@@ -71,9 +71,7 @@ private void onPlayerQuit(PlayerQuitEvent event) {
7171
Player player = event.getPlayer();
7272

7373
this.getByPlayerUuid(player.getUniqueId()).ifPresent(team -> {
74-
if (team.getMembers().size() == 1) {
75-
this.deleteTeam(team.getTeamId());
76-
}
74+
team.removeMember(player);
7775
});
7876
}
7977

@@ -115,20 +113,20 @@ private void runFoliaTeamUpdateTask() {
115113
public class Team {
116114

117115
private final UUID teamId;
118-
private final Set<Player> members;
116+
private final Map<UUID, Player> members;
119117

120118
public Team() {
121119
this.teamId = UUID.randomUUID();
122-
this.members = Sets.newHashSet();
120+
this.members = new HashMap<>();
123121
}
124122

125123
public void addMember(Player player) {
126-
this.members.add(player);
124+
this.members.put(player.getUniqueId(), player);
127125
TeamApiExample.this.teamsByPlayerUuid.put(player.getUniqueId(), this);
128126
}
129127

130128
public void removeMember(Player player) {
131-
this.members.remove(player);
129+
this.members.remove(player.getUniqueId());
132130
TeamApiExample.this.teamsByPlayerUuid.remove(player.getUniqueId());
133131

134132
Apollo.getPlayerManager().getPlayer(player.getUniqueId())
@@ -156,20 +154,21 @@ private TeamMember createTeamMember(Player member) {
156154

157155
// The refresh method used for updating members locations
158156
public void refresh() {
159-
List<TeamMember> teammates = this.members.stream().filter(Player::isOnline)
157+
List<TeamMember> teammates = this.members.values()
158+
.stream().filter(Player::isOnline)
160159
.map(this::createTeamMember)
161160
.collect(Collectors.toList());
162161

163-
this.members.forEach(member -> Apollo.getPlayerManager().getPlayer(member.getUniqueId())
162+
this.members.values().forEach(member -> Apollo.getPlayerManager().getPlayer(member.getUniqueId())
164163
.ifPresent(apolloPlayer -> TeamApiExample.this.teamModule.updateTeamMembers(apolloPlayer, teammates)));
165164
}
166165

167166
public UUID getTeamId() {
168167
return this.teamId;
169168
}
170169

171-
public Set<Player> getMembers() {
172-
return this.members;
170+
public Collection<Player> getMembers() {
171+
return this.members.values();
173172
}
174173

175174
@Override

example/bukkit/json/src/main/java/com/lunarclient/apollo/example/json/module/TeamJsonExample.java

Lines changed: 12 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@
2424
package com.lunarclient.apollo.example.json.module;
2525

2626
import com.google.common.collect.Maps;
27-
import com.google.common.collect.Sets;
2827
import com.google.gson.JsonArray;
2928
import com.google.gson.JsonObject;
3029
import com.lunarclient.apollo.example.ApolloExamplePlugin;
@@ -34,9 +33,10 @@
3433
import com.lunarclient.apollo.example.module.impl.TeamExample;
3534
import com.lunarclient.apollo.example.util.ServerUtil;
3635
import java.awt.Color;
36+
import java.util.Collection;
37+
import java.util.HashMap;
3738
import java.util.Map;
3839
import java.util.Optional;
39-
import java.util.Set;
4040
import java.util.UUID;
4141
import java.util.concurrent.TimeUnit;
4242
import net.kyori.adventure.text.Component;
@@ -67,9 +67,7 @@ private void onPlayerQuit(PlayerQuitEvent event) {
6767
Player player = event.getPlayer();
6868

6969
this.getByPlayerUuid(player.getUniqueId()).ifPresent(team -> {
70-
if (team.getMembers().size() == 1) {
71-
this.deleteTeam(team.getTeamId());
72-
}
70+
team.removeMember(player);
7371
});
7472
}
7573

@@ -111,20 +109,20 @@ private void runFoliaTeamUpdateTask() {
111109
public class Team {
112110

113111
private final UUID teamId;
114-
private final Set<Player> members;
112+
private final Map<UUID, Player> members;
115113

116114
public Team() {
117115
this.teamId = UUID.randomUUID();
118-
this.members = Sets.newHashSet();
116+
this.members = new HashMap<>();
119117
}
120118

121119
public void addMember(Player player) {
122-
this.members.add(player);
120+
this.members.put(player.getUniqueId(), player);
123121
TeamJsonExample.this.teamsByPlayerUuid.put(player.getUniqueId(), this);
124122
}
125123

126124
public void removeMember(Player player) {
127-
this.members.remove(player);
125+
this.members.remove(player.getUniqueId());
128126
TeamJsonExample.this.teamsByPlayerUuid.remove(player.getUniqueId());
129127

130128
JsonObject message = new JsonObject();
@@ -150,23 +148,24 @@ private JsonObject createTeamMember(Player member) {
150148

151149
// The refresh method used for updating members locations
152150
public void refresh() {
153-
JsonArray teammates = this.members.stream().filter(Player::isOnline)
151+
JsonArray teammates = this.members.values()
152+
.stream().filter(Player::isOnline)
154153
.map(this::createTeamMember)
155154
.collect(JsonArray::new, JsonArray::add, JsonArray::addAll);
156155

157156
JsonObject message = new JsonObject();
158157
message.addProperty("@type", "type.googleapis.com/lunarclient.apollo.team.v1.UpdateTeamMembersMessage");
159158
message.add("members", teammates);
160159

161-
this.members.forEach(member -> JsonPacketUtil.sendPacket(member, message));
160+
this.members.values().forEach(member -> JsonPacketUtil.sendPacket(member, message));
162161
}
163162

164163
public UUID getTeamId() {
165164
return this.teamId;
166165
}
167166

168-
public Set<Player> getMembers() {
169-
return this.members;
167+
public Collection<Player> getMembers() {
168+
return this.members.values();
170169
}
171170

172171
@Override

0 commit comments

Comments
 (0)