Skip to content

Commit acdca0d

Browse files
Implement party_info version 2 with party role (#20)
1 parent 6d7c1ce commit acdca0d

File tree

3 files changed

+96
-27
lines changed

3 files changed

+96
-27
lines changed
Lines changed: 93 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,24 @@
11
package net.hypixel.modapi.packet.impl.clientbound;
22

33
import net.hypixel.modapi.handler.ClientboundPacketHandler;
4-
import net.hypixel.modapi.packet.ClientboundHypixelPacket;
5-
import net.hypixel.modapi.packet.impl.VersionedPacket;
64
import net.hypixel.modapi.serializer.PacketSerializer;
7-
import org.jetbrains.annotations.Nullable;
85

96
import java.util.*;
107

118
public class ClientboundPartyInfoPacket extends ClientboundVersionedPacket {
12-
private static final int CURRENT_VERSION = 1;
9+
private static final int CURRENT_VERSION = 2;
1310

1411
private boolean inParty;
15-
private UUID leader;
16-
private Set<UUID> members;
12+
private Map<UUID, PartyMember> memberMap;
13+
14+
public ClientboundPartyInfoPacket(int version, boolean inParty, Map<UUID, PartyMember> memberMap) {
15+
super(version);
16+
if (version > CURRENT_VERSION) {
17+
throw new IllegalArgumentException("Version " + version + " is greater than the current version " + CURRENT_VERSION);
18+
}
1719

18-
public ClientboundPartyInfoPacket(boolean inParty, @Nullable UUID leader, Set<UUID> members) {
19-
super(CURRENT_VERSION);
2020
this.inParty = inParty;
21-
this.leader = leader;
22-
this.members = members;
21+
this.memberMap = memberMap;
2322
}
2423

2524
public ClientboundPartyInfoPacket(PacketSerializer serializer) {
@@ -34,33 +33,49 @@ protected boolean read(PacketSerializer serializer) {
3433

3534
this.inParty = serializer.readBoolean();
3635
if (!inParty) {
37-
this.leader = null;
38-
this.members = Collections.emptySet();
36+
this.memberMap = Collections.emptyMap();
3937
return true;
4038
}
4139

42-
this.leader = serializer.readUuid();
4340
int memberCount = serializer.readVarInt();
44-
Set<UUID> members = new HashSet<>(memberCount);
41+
Map<UUID, PartyMember> memberMap = new HashMap<>(memberCount);
4542
for (int i = 0; i < memberCount; i++) {
46-
members.add(serializer.readUuid());
43+
PartyMember member = new PartyMember(serializer);
44+
memberMap.put(member.getUuid(), member);
4745
}
48-
this.members = Collections.unmodifiableSet(members);
46+
this.memberMap = Collections.unmodifiableMap(memberMap);
4947
return true;
5048
}
5149

5250
@Override
5351
public void write(PacketSerializer serializer) {
5452
super.write(serializer);
53+
54+
if (version == 1) {
55+
Optional<UUID> leader = getLeader();
56+
if (!leader.isPresent()) {
57+
serializer.writeBoolean(false);
58+
return;
59+
}
60+
61+
serializer.writeBoolean(true);
62+
serializer.writeUuid(leader.get());
63+
Set<UUID> members = getMembers();
64+
serializer.writeVarInt(members.size());
65+
for (UUID member : members) {
66+
serializer.writeUuid(member);
67+
}
68+
return;
69+
}
70+
5571
serializer.writeBoolean(inParty);
5672
if (!inParty) {
5773
return;
5874
}
5975

60-
serializer.writeUuid(leader);
61-
serializer.writeVarInt(members.size());
62-
for (UUID member : members) {
63-
serializer.writeUuid(member);
76+
serializer.writeVarInt(memberMap.size());
77+
for (PartyMember member : memberMap.values()) {
78+
member.write(serializer);
6479
}
6580
}
6681

@@ -79,19 +94,73 @@ public boolean isInParty() {
7994
}
8095

8196
public Optional<UUID> getLeader() {
82-
return Optional.ofNullable(leader);
97+
if (!inParty) {
98+
return Optional.empty();
99+
}
100+
return memberMap.values().stream()
101+
.filter(member -> member.getRole() == PartyRole.LEADER)
102+
.map(PartyMember::getUuid)
103+
.findFirst();
83104
}
84105

85106
public Set<UUID> getMembers() {
86-
return members;
107+
return memberMap.keySet();
108+
}
109+
110+
public Map<UUID, PartyMember> getMemberMap() {
111+
return memberMap;
87112
}
88113

89114
@Override
90115
public String toString() {
91116
return "ClientboundPartyInfoPacket{" +
92117
"inParty=" + inParty +
93-
", leader=" + leader +
94-
", members=" + members +
118+
", memberMap=" + memberMap +
95119
"} " + super.toString();
96120
}
121+
122+
public static class PartyMember {
123+
private final UUID uuid;
124+
private final PartyRole role;
125+
126+
public PartyMember(UUID uuid, PartyRole role) {
127+
this.uuid = uuid;
128+
this.role = role;
129+
}
130+
131+
PartyMember(PacketSerializer serializer) {
132+
this.uuid = serializer.readUuid();
133+
this.role = PartyRole.VALUES[serializer.readVarInt()];
134+
}
135+
136+
void write(PacketSerializer serializer) {
137+
serializer.writeUuid(uuid);
138+
serializer.writeVarInt(role.ordinal());
139+
}
140+
141+
public UUID getUuid() {
142+
return uuid;
143+
}
144+
145+
public PartyRole getRole() {
146+
return role;
147+
}
148+
149+
@Override
150+
public String toString() {
151+
return "PartyMember{" +
152+
"uuid=" + uuid +
153+
", role=" + role +
154+
'}';
155+
}
156+
}
157+
158+
public enum PartyRole {
159+
LEADER,
160+
MOD,
161+
MEMBER,
162+
;
163+
164+
private static final PartyRole[] VALUES = values();
165+
}
97166
}

src/main/java/net/hypixel/modapi/packet/impl/serverbound/ServerboundPartyInfoPacket.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
import net.hypixel.modapi.serializer.PacketSerializer;
44

55
public class ServerboundPartyInfoPacket extends ServerboundVersionedPacket {
6-
private static final int CURRENT_VERSION = 1;
6+
private static final int CURRENT_VERSION = 2;
77

88
public ServerboundPartyInfoPacket() {
99
super(CURRENT_VERSION);

src/test/java/net/hypixel/modapi/packet/handler/PartyInfoHandler.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,9 @@ public class PartyInfoHandler implements PacketHandler<ServerboundPartyInfoPacke
1111
@Override
1212
public ClientboundHypixelPacket handle(String identifier, ServerboundPartyInfoPacket packet) {
1313
return new ClientboundPartyInfoPacket(
14+
2,
1415
false,
15-
null,
16-
Collections.emptySet()
16+
Collections.emptyMap()
1717
);
1818
}
1919
}

0 commit comments

Comments
 (0)