10
10
11
11
public class PacketRegistry {
12
12
13
- private final Map <String , RegisteredType > registrations = new ConcurrentHashMap <>();
13
+ private final Map <String , Registration > registrations = new ConcurrentHashMap <>();
14
14
private final Map <Class <? extends HypixelPacket >, String > classToIdentifier = new ConcurrentHashMap <>();
15
15
16
- public void registerPacketType (String identifier ,
17
- Class <? extends ClientboundHypixelPacket > clientboundClazz , Function <PacketSerializer , ClientboundHypixelPacket > clientPacketFactory ,
18
- Class <? extends HypixelPacket > serverboundClazz , Function <PacketSerializer , HypixelPacket > serverPacketFactory ) {
19
- registrations .put (identifier , new RegisteredType (clientboundClazz , clientPacketFactory , serverboundClazz , serverPacketFactory ));
20
- classToIdentifier .put (clientboundClazz , identifier );
21
- classToIdentifier .put (serverboundClazz , identifier );
16
+ private void register (
17
+ String identifier ,
18
+ Class <? extends ClientboundHypixelPacket > clientboundClazz , Function <PacketSerializer , ? extends ClientboundHypixelPacket > clientPacketFactory ,
19
+ Class <? extends HypixelPacket > serverboundClazz , Function <PacketSerializer , ? extends HypixelPacket > serverPacketFactory ) {
20
+ registrations .put (identifier , new Registration (clientboundClazz , clientPacketFactory , serverboundClazz , serverPacketFactory ));
21
+ if (clientboundClazz != null ) {
22
+ classToIdentifier .put (clientboundClazz , identifier );
23
+ }
24
+ if (serverboundClazz != null ) {
25
+ classToIdentifier .put (serverboundClazz , identifier );
26
+ }
27
+ }
28
+
29
+ public RegistrationBuilder define (String identifier ) {
30
+ return new RegistrationBuilder (this , identifier );
22
31
}
23
32
24
- private RegisteredType getRegisteredType (String identifier ) {
25
- RegisteredType registeredType = registrations .get (identifier );
26
- if (registeredType == null ) {
33
+ private Registration getRegistration (String identifier ) {
34
+ Registration registration = registrations .get (identifier );
35
+ if (registration == null ) {
27
36
throw new IllegalArgumentException ("Unknown packet identifier: " + identifier );
28
37
}
29
- return registeredType ;
38
+ return registration ;
30
39
}
31
40
32
41
public boolean isRegistered (String identifier ) {
33
42
return registrations .containsKey (identifier );
34
43
}
35
44
36
45
public ClientboundHypixelPacket createClientboundPacket (String identifier , PacketSerializer serializer ) {
37
- return getRegisteredType (identifier ).clientPacketFactory .apply (serializer );
46
+ return getRegistration (identifier ).clientPacketFactory .apply (serializer );
38
47
}
39
48
40
49
public HypixelPacket createServerboundPacket (String identifier , PacketSerializer serializer ) {
41
- return getRegisteredType (identifier ).serverPacketFactory .apply (serializer );
50
+ return getRegistration (identifier ).serverPacketFactory .apply (serializer );
42
51
}
43
52
44
53
public String getIdentifier (Class <? extends HypixelPacket > clazz ) {
@@ -49,20 +58,64 @@ public Set<String> getIdentifiers() {
49
58
return Collections .unmodifiableSet (registrations .keySet ());
50
59
}
51
60
52
- private static final class RegisteredType {
61
+ public static final class RegistrationBuilder {
62
+ private final PacketRegistry registry ;
63
+ private final String identifier ;
64
+
65
+ private Class <? extends ClientboundHypixelPacket > clientboundClazz ;
66
+ private Function <PacketSerializer , ? extends ClientboundHypixelPacket > clientPacketFactory ;
67
+ private Class <? extends HypixelPacket > serverboundClazz ;
68
+ private Function <PacketSerializer , ? extends HypixelPacket > serverPacketFactory ;
69
+
70
+ RegistrationBuilder (PacketRegistry registry , String identifier ) {
71
+ this .registry = registry ;
72
+ this .identifier = identifier ;
73
+ }
74
+
75
+ public <T extends ClientboundHypixelPacket > RegistrationBuilder clientbound (
76
+ Class <T > clientboundClazz , Function <PacketSerializer , T > clientPacketFactory ) {
77
+ this .clientboundClazz = clientboundClazz ;
78
+ this .clientPacketFactory = clientPacketFactory ;
79
+ return this ;
80
+ }
81
+
82
+ public <T extends HypixelPacket > RegistrationBuilder serverbound (
83
+ Class <T > serverboundClazz , Function <PacketSerializer , T > serverPacketFactory ) {
84
+ this .serverboundClazz = serverboundClazz ;
85
+ this .serverPacketFactory = serverPacketFactory ;
86
+ return this ;
87
+ }
88
+
89
+ public void register () {
90
+ registry .register (identifier , clientboundClazz , clientPacketFactory , serverboundClazz , serverPacketFactory );
91
+ }
92
+
93
+ }
94
+
95
+ private static final class Registration {
53
96
54
97
private final Class <? extends ClientboundHypixelPacket > clientboundClazz ;
55
- private final Function <PacketSerializer , ClientboundHypixelPacket > clientPacketFactory ;
98
+ private final Function <PacketSerializer , ? extends ClientboundHypixelPacket > clientPacketFactory ;
56
99
private final Class <? extends HypixelPacket > serverboundClazz ;
57
- private final Function <PacketSerializer , HypixelPacket > serverPacketFactory ;
100
+ private final Function <PacketSerializer , ? extends HypixelPacket > serverPacketFactory ;
58
101
59
- public RegisteredType (Class <? extends ClientboundHypixelPacket > clientboundClazz , Function <PacketSerializer , ClientboundHypixelPacket > clientPacketFactory ,
60
- Class <? extends HypixelPacket > serverboundClazz , Function <PacketSerializer , HypixelPacket > serverPacketFactory ) {
102
+ public Registration (Class <? extends ClientboundHypixelPacket > clientboundClazz , Function <PacketSerializer , ? extends ClientboundHypixelPacket > clientPacketFactory ,
103
+ Class <? extends HypixelPacket > serverboundClazz , Function <PacketSerializer , ? extends HypixelPacket > serverPacketFactory ) {
61
104
this .clientboundClazz = clientboundClazz ;
62
105
this .clientPacketFactory = clientPacketFactory ;
63
106
this .serverboundClazz = serverboundClazz ;
64
107
this .serverPacketFactory = serverPacketFactory ;
65
108
}
109
+
110
+ @ Override
111
+ public String toString () {
112
+ return "Registration{" +
113
+ "clientboundClazz=" + clientboundClazz +
114
+ ", clientPacketFactory=" + clientPacketFactory +
115
+ ", serverboundClazz=" + serverboundClazz +
116
+ ", serverPacketFactory=" + serverPacketFactory +
117
+ '}' ;
118
+ }
66
119
}
67
120
68
121
}
0 commit comments