@@ -28,7 +28,7 @@ public static HypixelModAPI getInstance() {
28
28
}
29
29
30
30
private final PacketRegistry registry = new PacketRegistry ();
31
- private final List < ClientboundPacketHandler > handlers = new CopyOnWriteArrayList <>();
31
+ private final Map < Class <? extends ClientboundHypixelPacket >, Collection < ClientboundPacketHandler <?>>> handlers = new ConcurrentHashMap <>();
32
32
private final Set <String > subscribedEvents = ConcurrentHashMap .newKeySet ();
33
33
private Set <String > lastSubscribedEvents = Collections .emptySet ();
34
34
private Predicate <HypixelPacket > packetSender = null ;
@@ -71,20 +71,16 @@ private void registerEventPackets() {
71
71
}
72
72
73
73
private void registerDefaultHandler () {
74
- registerHandler (new ClientboundPacketHandler () {
75
- @ Override
76
- public void onHelloEvent (ClientboundHelloPacket packet ) {
77
- sendRegisterPacket (true );
78
- }
79
- });
74
+ registerHandler (ClientboundHelloPacket .class , p -> sendRegisterPacket (true ));
80
75
}
81
76
82
77
public PacketRegistry getRegistry () {
83
78
return registry ;
84
79
}
85
80
86
- public void registerHandler (ClientboundPacketHandler handler ) {
87
- handlers .add (handler );
81
+ public <T extends ClientboundHypixelPacket > void registerHandler (Class <T > packetClass , ClientboundPacketHandler <T > handler ) {
82
+ if (packetClass == null || handler == null ) return ;
83
+ handlers .computeIfAbsent (packetClass , cls -> new CopyOnWriteArrayList <>()).add (handler );
88
84
}
89
85
90
86
public void subscribeToEventPacket (Class <? extends EventPacket > packet ) {
@@ -135,7 +131,10 @@ public void handle(String identifier, PacketSerializer serializer) {
135
131
}
136
132
137
133
public void handle (ClientboundHypixelPacket packet ) {
138
- for (ClientboundPacketHandler handler : handlers ) {
134
+ Collection <ClientboundPacketHandler <?>> typedHandlers = handlers .get (packet .getClass ());
135
+ // nothing registered for this packet.
136
+ if (typedHandlers == null ) return ;
137
+ for (ClientboundPacketHandler <?> handler : typedHandlers ) {
139
138
packet .handle (handler );
140
139
}
141
140
}
0 commit comments