11package net .hypixel .modapi .packet .impl .clientbound ;
22
33import net .hypixel .modapi .handler .ClientboundPacketHandler ;
4- import net .hypixel .modapi .packet .ClientboundHypixelPacket ;
5- import net .hypixel .modapi .packet .impl .VersionedPacket ;
64import net .hypixel .modapi .serializer .PacketSerializer ;
7- import org .jetbrains .annotations .Nullable ;
85
96import java .util .*;
107
118public 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}
0 commit comments