1010
1111public class PacketRegistry {
1212
13- private final Map <String , RegisteredType > registrations = new ConcurrentHashMap <>();
13+ private final Map <String , Registration > registrations = new ConcurrentHashMap <>();
1414 private final Map <Class <? extends HypixelPacket >, String > classToIdentifier = new ConcurrentHashMap <>();
1515
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 );
2231 }
2332
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 ) {
2736 throw new IllegalArgumentException ("Unknown packet identifier: " + identifier );
2837 }
29- return registeredType ;
38+ return registration ;
3039 }
3140
3241 public boolean isRegistered (String identifier ) {
3342 return registrations .containsKey (identifier );
3443 }
3544
3645 public ClientboundHypixelPacket createClientboundPacket (String identifier , PacketSerializer serializer ) {
37- return getRegisteredType (identifier ).clientPacketFactory .apply (serializer );
46+ return getRegistration (identifier ).clientPacketFactory .apply (serializer );
3847 }
3948
4049 public HypixelPacket createServerboundPacket (String identifier , PacketSerializer serializer ) {
41- return getRegisteredType (identifier ).serverPacketFactory .apply (serializer );
50+ return getRegistration (identifier ).serverPacketFactory .apply (serializer );
4251 }
4352
4453 public String getIdentifier (Class <? extends HypixelPacket > clazz ) {
@@ -49,20 +58,64 @@ public Set<String> getIdentifiers() {
4958 return Collections .unmodifiableSet (registrations .keySet ());
5059 }
5160
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 {
5396
5497 private final Class <? extends ClientboundHypixelPacket > clientboundClazz ;
55- private final Function <PacketSerializer , ClientboundHypixelPacket > clientPacketFactory ;
98+ private final Function <PacketSerializer , ? extends ClientboundHypixelPacket > clientPacketFactory ;
5699 private final Class <? extends HypixelPacket > serverboundClazz ;
57- private final Function <PacketSerializer , HypixelPacket > serverPacketFactory ;
100+ private final Function <PacketSerializer , ? extends HypixelPacket > serverPacketFactory ;
58101
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 ) {
61104 this .clientboundClazz = clientboundClazz ;
62105 this .clientPacketFactory = clientPacketFactory ;
63106 this .serverboundClazz = serverboundClazz ;
64107 this .serverPacketFactory = serverPacketFactory ;
65108 }
109+
110+ @ Override
111+ public String toString () {
112+ return "Registration{" +
113+ "clientboundClazz=" + clientboundClazz +
114+ ", clientPacketFactory=" + clientPacketFactory +
115+ ", serverboundClazz=" + serverboundClazz +
116+ ", serverPacketFactory=" + serverPacketFactory +
117+ '}' ;
118+ }
66119 }
67120
68121}
0 commit comments