1
1
package net .hypixel .modapi .packet .impl .clientbound ;
2
2
3
3
import net .hypixel .modapi .handler .ClientboundPacketHandler ;
4
- import net .hypixel .modapi .packet .ClientboundHypixelPacket ;
5
- import net .hypixel .modapi .packet .impl .VersionedPacket ;
6
4
import net .hypixel .modapi .serializer .PacketSerializer ;
7
- import org .jetbrains .annotations .Nullable ;
8
5
9
6
import java .util .*;
10
7
11
8
public class ClientboundPartyInfoPacket extends ClientboundVersionedPacket {
12
- private static final int CURRENT_VERSION = 1 ;
9
+ private static final int CURRENT_VERSION = 2 ;
13
10
14
11
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
+ }
17
19
18
- public ClientboundPartyInfoPacket (boolean inParty , @ Nullable UUID leader , Set <UUID > members ) {
19
- super (CURRENT_VERSION );
20
20
this .inParty = inParty ;
21
- this .leader = leader ;
22
- this .members = members ;
21
+ this .memberMap = memberMap ;
23
22
}
24
23
25
24
public ClientboundPartyInfoPacket (PacketSerializer serializer ) {
@@ -34,33 +33,49 @@ protected boolean read(PacketSerializer serializer) {
34
33
35
34
this .inParty = serializer .readBoolean ();
36
35
if (!inParty ) {
37
- this .leader = null ;
38
- this .members = Collections .emptySet ();
36
+ this .memberMap = Collections .emptyMap ();
39
37
return true ;
40
38
}
41
39
42
- this .leader = serializer .readUuid ();
43
40
int memberCount = serializer .readVarInt ();
44
- Set <UUID > members = new HashSet <>(memberCount );
41
+ Map <UUID , PartyMember > memberMap = new HashMap <>(memberCount );
45
42
for (int i = 0 ; i < memberCount ; i ++) {
46
- members .add (serializer .readUuid ());
43
+ PartyMember member = new PartyMember (serializer );
44
+ memberMap .put (member .getUuid (), member );
47
45
}
48
- this .members = Collections .unmodifiableSet ( members );
46
+ this .memberMap = Collections .unmodifiableMap ( memberMap );
49
47
return true ;
50
48
}
51
49
52
50
@ Override
53
51
public void write (PacketSerializer serializer ) {
54
52
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
+
55
71
serializer .writeBoolean (inParty );
56
72
if (!inParty ) {
57
73
return ;
58
74
}
59
75
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 );
64
79
}
65
80
}
66
81
@@ -79,19 +94,73 @@ public boolean isInParty() {
79
94
}
80
95
81
96
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 ();
83
104
}
84
105
85
106
public Set <UUID > getMembers () {
86
- return members ;
107
+ return memberMap .keySet ();
108
+ }
109
+
110
+ public Map <UUID , PartyMember > getMemberMap () {
111
+ return memberMap ;
87
112
}
88
113
89
114
@ Override
90
115
public String toString () {
91
116
return "ClientboundPartyInfoPacket{" +
92
117
"inParty=" + inParty +
93
- ", leader=" + leader +
94
- ", members=" + members +
118
+ ", memberMap=" + memberMap +
95
119
"} " + super .toString ();
96
120
}
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
+ }
97
166
}
0 commit comments